题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
现在小学的数学题目也不是那么好玩的。 看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每个方块代表 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
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
运行限制
最大运行时间:1s
最大运行内存: 128M
代码:
public class Main {
static int a[]= {1,2,3,4,5,6,7,8,9,10,11,12,13};
static int sum;
public static void main(String[] args) {
sum =0;
sort(0);
System.out.println(sum);
}
public static void sort(int k) {
//不需要等1~13的全部排列完毕,可以先对已经排列的前几个数字进行判断
if(k==3&&a[0]+a[1]!=a[2])return;//k==3即已经排好了前三个,此时先检验一遍,不符合则return
if(k==6&&a[3]-a[4]!=a[5])return;//已经排好前六个,
if(k==9&&a[6]*a[7]!=a[8])return;//已经排好前九个,
if(k==12&&a[9]==a[11]*a[10]) {//全部排好时,若符合,sum++
sum++;
return;
}
//全排列
for(int i=k;i<13;i++) {//是i<13或i<=12
{int t=a[k];a[k]=a[i];a[i]=t;}
sort(k+1);
{int t=a[k];a[k]=a[i];a[i]=t;}
}
}
}
答案:64