现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图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