问题
寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图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
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
思路
1.用递归计算1-13的全排列
2.取每个排列的前12项进行验证
代码
public class Main6 {
static int count=0;
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13};
dfs(arr,0);
System.out.println(count);
}
public static void dfs(int[] arr,int start) {
if(start>=3) {
if(arr[0]+arr[1]!=arr[2])
return ;
}
if(start>=6) {
if(arr[3]-arr[4]!=arr[5])
return ;
}
if(start>=9) {
if(arr[6]*arr[7]!=arr[8])
return ;
}
if(start>=12) {
if(arr[10]*arr[11]==arr[9]) {
count++;
return ;
}
}
for(int i=start;i<arr.length;i++) {
int tmp = arr[i];
arr[i] = arr[start];
arr[start] = tmp;
dfs(arr,start+1);
tmp = arr[i];
arr[i] = arr[start];
arr[start] = tmp;
}
}
}