题目描述
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:

□ += □
□ -= □
□ × □ = □
□ ÷ □ =(如果显示不出来,可以参见【图1.jpg】)

每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5

以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5

就算两种解法。(加法,乘法交换律后算不同的方案)

你一共找到了多少种方案?

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

思路分析

递归版的java全排列+判断条件是否满足

代码实现
package TEST;

class Main{
    public static int[] a={1,2,3,4,5,6,7,8,9,10,11,12,13};
    public static int count = 0;
    public static void main(String[] args) {
        dfs(0);
        System.out.println(count);
    }

    //递归实现全排列(深度优先)
    public static void dfs(int k) {
        if (k == 12) {//如果是13个全部参与的话这里的k==12应该变为k==13
            if (judge())
                count++;
            return;// !!!一次全排列
        }
        for (int i = k;i<=12;i++) {
            int temp = a[i];
            a[i] = a[k];
            a[k] = temp;
            dfs(k+1);
            temp = a[i];
            a[i] = a[k];
            a[k] = temp;
            //因为修改是对唯一的数组做了修改,为了不影响后续的排列,
            //每一次会递归完成并回到这里时都要将交换复原
        }
    }

    //判断是否符合
    public static boolean judge() {
        if (a[1] + a[2] == a[3] && a[4] - a[5] == a[6] && a[7] * a[8] == a[9]
                && (a[10] / a[11] == a[12] && a[10] % a[11] == 0)) {// 必须判断余数为零
            return true;
        } else {
            return false;
        }
    }
}
答案

64
2016蓝桥杯省赛---java---A---6(寒假作业)_算法