雖是小學(xué)題目蚜锨,但是完全可以作為一道模擬的算法題來解決,甚至可以作為面試題隧出,自己動手寫的時候考慮得還是比較多的踏志,不信你們也可以試試,下面是筆者的實現(xiàn)代碼胀瞪,快把你們的代碼也曬出來吧针余。
// 6087 5173 1358 3825 2531
int[][] num = new int[][]{
{6, 0, 8, 7},
{5, 1, 7, 3},
{1, 3, 5, 8},
{3, 8, 2, 5},
{2, 5, 3, 1}
};
for (int i = 0; i < 10000; ++i) {
// 取出個十百千位
int g = i % 10;
int s = (i / 10) % 10;
int b = (i / 100) % 10;
int q = (i / 1000) % 10;
// 是否是最終答案標(biāo)志位
boolean isRight = true;
// 篩選出只出現(xiàn)兩次的饲鄙,并且本次當(dāng)前位置不對
for (int j = 0; j < 5; j++) {
int count = 0;
for (int k = 0; k < 4; k++) {
if ((g == num[j][k] && k != 3)
|| (s == num[j][k] && k != 2)
|| (b == num[j][k] && k != 1)
|| (q == num[j][k] && k != 0)) {
++count;
}
}
// 如果不是出現(xiàn)兩次的直接跳出
if (count != 2) {
isRight = false;
break;
}
}
if (isRight) {
// 下面要判斷所有位置都要是錯誤的
for (int j = 0; j < 5; j++) {
if (g == num[j][3] || s == num[j][2] || b == num[j][1] || q == num[j][0]) {
isRight = false;
break;
}
}
}
if (isRight) {
// 到此才算是正確答案:8712
System.out.println(i);
}
}