给聪明的你解解闷

作者: Blankj | 来源:发表于2016-11-21 22:03 被阅读767次
    给聪明的你解解闷

    虽是小学题目,但是完全可以作为一道模拟的算法题来解决,甚至可以作为面试题,自己动手写的时候考虑得还是比较多的,不信你们也可以试试,下面是笔者的实现代码,快把你们的代码也晒出来吧。

    // 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);
        }
    }
    

    相关文章

      网友评论

        本文标题:给聪明的你解解闷

        本文链接:https://www.haomeiwen.com/subject/zetppttx.html