题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意: 111 + 222 = 333 是错误的填写法! 因为每个数字必须是不同的! 也就是说:1 ~ 9中的所有数字,每个必须出现且仅出现一次!
注意:不包括数字 “0”!
注意: 满足加法交换率的式子算两种不同的答案。 所以答案肯定是个偶数!
源码实现
思路概述
因为9个数字互不相同,所以a设置123到987,降低遍历的次数。b的大小受限于a,总和是c不超过987,所以上界设置为987-a,c通过式子a+b=c设置。
判断三个数的每一位相不相同,利用和桶排序类似的原理,数组记录1-9每个数字的标志位。
源码
public class 算式问题 {
public static void main(String[] args) {
int ans = 0;
for (int a = 123; a <= 987; a++) {
for (int b = 123; b <= 987 - a; b++) {
int c = a + b;
if (check(a, b, c)) {
//System.out.println(a + "+" + b + "=" + c);
ans++;
}
}
}
System.out.println(ans);
}
public static boolean check(int a, int b, int c) {//abc是否都不一样
int[] flag = new int[10];
flag[0] = 1;
while (a != 0) {
if (flag[a % 10] == 0) flag[a % 10] = 1;
else return false;
if (flag[b % 10] == 0) flag[b % 10] = 1;
else return false;
if (flag[c % 10] == 0) flag[c % 10] = 1;
else return false;
a /= 10;
b /= 10;
c /= 10;
}
return true;
}
}