虽是小学题目,但是完全可以作为一道模拟的算法题来解决,甚至可以作为面试题,自己动手写的时候考虑得还是比较多的,不信你们也可以试试,下面是笔者的实现代码,快把你们的代码也晒出来吧。
// 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;
// 是否是最终答案标志位
boolean isRight = true;
// 筛选出只出现两次的,并且本次当前位置不对
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;
}
}
// 如果不是出现两次的直接跳出
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);
}
}
网友评论