【藍橋杯】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