题目
凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
答案:29
这一题也可以用暴力破解,9层for循环,不过有点麻烦,不如用递归加回溯;
这道题值得注意的是分数的运算,我们都知道浮点数运算会有误差,所以我们尽量转化为整数运算
原式可转化为 B*GHI+C*DEF =C*GHI*(10-A)
这样就可以避免误差了!
代码:
static int[] s = new int[9];
static int[] v = new int[9];
static int sum = 0;
public static void main(String[] args) {
s(0);
System.out.println(sum);
}
public static void s(int code) {
if(code==9) {
int a = s[0],
b = s[1],
c = s[2],
def = s[3]*100+s[4]*10+s[5],
ghi = s[6]*100+s[7]*10+s[8];
if(c*ghi*(10-a)==b*ghi+c*def){
sum++;
}
}
for (int i = 0; i < 9; i++) {
if(v[i]==0){
v[i] = 1;
s[code] = i+1;
s(code+1);
v[i] = 0;//回溯
}
}
}
欢迎指正~