9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
- 总数目包含题目给出的那个示例。
- 乘数和被乘数交换后作为同一方案来看待。
答案:1625
private static int[] arr= {1,2,3,4,5,6,7,8,9};
static int ans;
public static void main(String[] args) {
f(0);
System.out.println(ans/2);
}
private static void f(int k) {//全排列
if(k>=9) {
int a=0;
for(int x=0;x<arr.length;x++) {
a=a*10+arr[x];
int b=0;
for(int y=x+1;y<arr.length;y++) {
b=b*10+arr[y];
}
if(incontains(""+a*b)&&(""+a*b).length()>=9) ans++;
}
return;
}
for(int a=k;a<arr.length;a++) {
swap(a,k);
f(k+1);
swap(a,k);
}
}
private static void swap(int a, int k) {
int t=arr[a];
arr[a]=arr[k];
arr[k]=t;
}
private static boolean incontains(String i) {//判断有没有重复的字符
boolean[] str = new boolean[10];
for(int k=0;k<i.length();k++) {
int num =i.charAt(k)-'0';
if(str[num]||num==0) {
return false;
}
str[num]=true;
}
return true;
}