版权声明:本文为博主原创文章,转载请联系本人,未经博主允许不得转载 https://blog.csdn.net/stormdony/article/details/88595934
【蓝桥杯】04第六届省赛Java语言B组题目:
三羊献瑞
观察下面的加法算式:
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
最终答案是:1085
这道题的解法不是很复杂,关键就是使用暴力法破解的时候条件的选择比较麻烦。我做的时候都觉得有点眼花。。。
public class 三羊献瑞 {
public static void main(String[] args) {
// 因为每一个位都不相等,所以最小是1023,最大是9876
for (int i = 1023; i < 9876; i++) {
for (int j = 1023; j < 9876; j++) {
int sum = i + j;
if (sum > 10234 && sum <= 97654) {
char[] a1 = String.valueOf(i).toCharArray();
char[] a2 = String.valueOf(j).toCharArray();
char[] a3 = String.valueOf(sum).toCharArray();
// 判断a1每一个位都不等
if (a1[0] != a1[1] && a1[0] != a1[2] && a1[0] != a1[3] && a1[1] != a1[2] && a1[1] != a1[3]
&& a1[2] != a1[3]) {
// 判断a2全不等
if (a2[0] != a2[1] && a2[0] != a2[2] && a2[0] != a2[3] && a2[1] != a2[2] && a2[1] != a2[3]
&& a2[2] != a2[3]) {
// 判断a3全不等
if (a3[0] != a3[1] && a3[0] != a3[2] && a3[0] != a3[3] && a3[0] != a3[4] && a3[1] != a3[2]
&& a3[1] != a3[3] && a3[1] != a3[4] && a3[2] != a3[3] && a3[2] != a3[4]
&& a3[3] != a3[4]) {
// 相等的位置
if (a1[1] == a2[3] && a1[2] == a3[2] && a1[1] == a3[3] && a2[0] == a3[0]
&& a2[1] == a3[1]) {
// a1[0]不存在与a2和sum中,(祥不在其他两个中);
if (!String.valueOf(j).contains(String.valueOf(a1[0]))
&& !String.valueOf(sum).contains(String.valueOf(a1[0]))) {
// a1[3]不存在与a2和sum中,(辉不在其他两个中);
if (!String.valueOf(sum).contains(String.valueOf(a1[3]))
&& !String.valueOf(j).contains(String.valueOf(a1[3]))) {
// a3[4]不存在与a1和a2中,(气不在其他两个中);
if (!String.valueOf(i).contains(String.valueOf(a3[4]))
&& !String.valueOf(j).contains(String.valueOf(a3[4]))) {
if (a1[2] != a2[2]) {
System.out.println(" " + i);
System.out.println("+" + j);
System.out.println("-----");
System.out.println(sum);
}
}
}
}
}
}
}
}
}
}
}
}
}
9567
+1085
-----
10652