标题:9数算式
观察如下的算式:
9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
1. 总数目包含题目给出的那个示例。
2. 乘数和被乘数交换后作为同一方案来看待。
请提交一个整数,不要填写任何多余内容或说明文字。
public class Main {
public static int count=0;
public static String num="";
public static int[] cover=new int[10];
public static void main(String[] args) {
fun(0,num);
System.out.println(count/2);
}
public static void fun(int n,String num) {
if(n==9) {
calculate(num);
}else {
for(int i=1;i<=9;i++) {
if(cover[i]==0) {
cover[i]=1;
fun(n+1, num+i);
cover[i]=0;
}
}
}
}
//Long类型19位,足够
public static void calculate(String num) {
String left1="",left2="";
for(int i=1;i<=8;i++) {
left1=num.substring(0,i);
left2=num.substring(i);
Long l1=Long.parseLong(left1);
Long l2=Long.parseLong(left2);
String re=(l1*l2)+"";
if(test9(re))
count++;
}
}
public static boolean test9(String re){
if(re.length()!=9) return false;
int[] test=new int[9];
for(int i=0;i<9;i++){
if(re.charAt(i)=='0')return false;
if(test[Integer.parseInt(re.charAt(i)+"")-1]==1)
return false;
else {
test[Integer.parseInt(re.charAt(i)+"")-1]=1;
}
}
return true;
}
}
答案:1625
思路:
运用深搜函数fun,得无重复数字。
针对每个无重复数字,calculate函数将其分成两部分,并计算结果。
针对每个计算结果,test9函数检查是否符合要求。
最终需要将count/2,因为左侧两个因数可以交换。