寒假作业
寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图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
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
分析:
答案为64, 1376 是错误的,看代码注释。
代码在此:
#include<stdio.h>
#include<string.h>
#define SIZE 13 + 10
int v[SIZE];
int n = 12;
int data[SIZE];
int tot = 0;
void dfs (int k) {
if(k == 3){
if(data[0]+data[1] == data[2])
;
else
return;
} else if(k == 6){
if(data[3]-data[4] == data[5])
;
else
return;
} else if(k == 9){
if(data[6]*data[7] == data[8])
;
else
return;
} else if(k == 12){
if(data[9]*1.0/data[10]*1.0 == data[11]*1.0){ //答案为1376错误陷阱, 如果需要整数除法运算一定要全部化为小数(因为得知答案一定为整数所以不需要double类型也行),防止计算为带小数的数省略小数点后面的数
tot ++;
}
else
return;
}
int i;
for(i = 1; i <= 13; i ++){
if(v[i] == 0){
v[i] = 1;
data[k] = i;
dfs(k+1);
v[i] = 0;
}
}
}
int main () {
memset(v, 0, sizeof(v));
dfs(0);
printf("%d", tot);
return 0;
}