问题描述
B DEF
A + --- + ------- = 10
C GHI
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你输出的应该是个整数,不要输出任何多余的内容或说明性文字。
输入
没有输入。
输出
输出一个整数,即解法总数。
分析:结果为29,直接用的暴力搜索,但是要注意的有两点:
- 9个数每个只用了一次
- 判断条件不能为原等式,除法会造成精度的缺失。(刚好最近数值分析里面讲了避免误差的两个原则,用加不用减,用乘不用除。)
public class Equation {
public static void main(String[] args) {
//暴力搜索
int count = 0;
for (int a = 1; a < 10; a++) {
for (int b = 1; b < 10; b++) {
for (int c = 1; c < 10; c++) {
for (int d = 1; d < 10; d++) {
for (int e = 1; e < 10; e++) {
for (int f = 1; f < 10; f++) {
for (int g = 1; g < 10; g++) {
for (int h = 1; h < 10; h++) {
for (int i = 1; i < 10; i++) {
//每个数只能出现一次
if (a != b && a!= c && a!= d && a!= e && a != f && a != g && a != h && a != i
&& b != c && b != d && b != e && b != f && b != g && b != h && b != i
&& c != d && c != e && c != f && c != g && c != h && c != i
&& d != e && d != f && d != g && d != h && d != i
&& e != f && e != g && e != h && e != i
&& f != g && f != h && f != i
&& g != h && g != i
&& h != i) {
//将除法全都变成乘法
int t1 = c * a * (g*100 + h*10 + i);
int t2 = b * (g*100 + h*10 + i);
int t3 = c * (d*100 + e*10 + f);
int t4 = 10 * c *(g*100 + h*10 + i);
if (t1 + t2 + t3 == t4) {
count ++;
}
}
}
}
}
}
}
}
}
}
}
System.out.println(count);
}
}