题目:寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
比如:
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.jpg】)
图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
#include<stdio.h>
int a[14], b, c, sum = 0;
bool isVisit[14];
bool test(int next) {
if(3 == next)
if (a[1] + a[2] != a[3])
return false;
if(6 == next)
if(a[4] - a[5] != a[6])
return false;
if (9 == next)
if (a[7] * a[8] != a[9])
return false;
if (12 == next)
if (a[10] / a[11] != a[12] || a[10] % a[11] != 0)
return false;
return true;
}
void dfs(int num) {
if (13 == num)
if ((a[3] == a[1] + a[2]) && (a[6] == a[4] - a[5]) &&
(a[9] == a[7] * a[8]) && (a[12] == a[10] / a[11]))
sum++;
for (int i = 1; i <= 13; i++)
if (isVisit[i] == 0) {
isVisit[i] = 1;
a[num] = i;
if (!test(num)) {
isVisit[i] = 0;
continue;
}
dfs(num + 1);
isVisit[i] = 0;
}
}
int main() {
dfs(1);
printf("%d\n", sum);
return 0;
}
第七届蓝桥杯所有组试题与部分答案