碰见这道题一开始也蒙了,知道要求出来每一种排列的方式,可是就是不知道怎么写,又去翻书找的全排列,好了废话不多说了,直接上代码
import java.util.*;
public class DaiFenShu {
/**
* @param args
*/
static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int num[]={1,2,3,4,5,6,7,8,9};
System.out.println(f(num,0,N));
}
public static void t(int num[],int st,int i)
{
int t;
t=num[st];
num[st]=num[i];
num[i]=t;
}
public static int getnum(int num[],int f,int k)
{
int num2=0;
for(int i=f;i<=k;i++) //这个以前我竟然不会,这个思路很重要,用于将几个数字转换成一个数
{
num2=num2*10+num[i];
}
return num2;
}
public static int f(int num[],int p,int N)//红色字体是全排列代码
{
if(p==num.length-1)
{
for(int i=0;i<num.length-2;i++)//这一部分指的是全排列的每一种排序方式的判断
for(int j=i+1;j<num.length-1;j++)
{
int a=getnum(num,0,i);
int b=getnum(num,i+1,j);
int c=getnum(num,j+1,num.length-1);
if(a+b/c==N && b%c==0)
{
count++;
}
}
}
else
{
for(int i=p;i<num.length;i++)
{
t(num,p,i);
f(num,p+1,N);
t(num,p,i);
}
}
return count;
}
}