package abc;
import java.util.Scanner;
public class abc {
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int k=0;
for(int a1=1;a1<10;a1++)
{
for(int a2=1;a2<10;a2++)
{
if(a1!=a2)
{
for(int a3=1;a3<10;a3++)
{
if(a1!=a3 && a2!=a3)
{
for(int a4=1;a4<10;a4++)
{
if(a1!=a4 && a2!=a4 && a3!=a4)
{
for(int a5=1;a5<10;a5++)
{
if(a1!=a5 && a2!=a5 && a3!=a5 && a4!=a5)
{
for(int a6=1;a6<10;a6++)
{
if(a1!=a6 && a2!=a6 && a3!=a6 && a4!=a6 && a5!=a6)
{
for(int a7=1;a7<10;a7++)
{
if(a1!=a7 && a2!=a7 && a3!=a7 && a4!=a7 && a5!=a7 && a6!=a7)
{
for(int a8=1;a8<10;a8++)
{
if(a1!=a8 && a2!=a8 && a3!=a8 && a4!=a8 && a5!=a8 && a6!=a8 && a7!=a8)
{
for(int a9=1;a9<10;a9++)
{
if(a1!=a9 && a2!=a9 && a3!=a9 && a4!=a9 && a5!=a9 && a6!=a9 && a7!=a9 && a8!=a9)
{
int[] count={a1,a2,a3,a4,a5,a6,a7,a8,a9};
double num1=0;
for(int a=0;a<=(n+"").length();a++)
{
num1=num1*10+count[a];
if(num1<n)
{
double num2=0;
for(int b=a+1;b<8;b++)
{
num2=num2*10+count[b];
double num3=0;
for(int c=b+1;c<count.length;c++)
{
num3=num3*10+count[c];
}
if(n==num1+num2/num3)
{
System.out.println((int)num1+"+"+(int)num2+"/"+(int)num3);
k++;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
System.out.println(k);
}
}
這個是其中一種答案,大致容易懂,請問各位大神。num2那裡<8,8是哪裡來的,還有num3的<count.length 為什麼是這個?謝謝各位大神
原理是找到1到9的全排列,然後將一個全排列分成3部分,num1,num2,num3. num1的位數必須小於等於輸入的數的位數,所以有a <= (n + "").length(); num2的位數必須小於等於7位,所以有b<8 因為num1和num3的位數至少得有一位吧。num3就是剩下的位數所以是(b+1)~count.length .懂?