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