寒假作业-----蓝桥杯



现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:


□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □

(如果显示不出来,可以参见【图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


就算两种解法。(加法,乘法交换律后算不同的方案)

你一共找到了多少种方案?
该题属于深度优先搜索(DFS)

#include #include"cstdlib" using namespace std; int num[13]= {0},count=0,visited[13]= {0}; int test(int n) { if(n==2) { if(num[0]+num[1]==num[2]) return 1; } else if(n==5) { if(num[3]-num[4]==num[5]) return 1; } else if(n==8) { if(num[6]*num[7]==num[8]) { return 1; } } else if(n==11) { if(num[9]==num[11]*num[10]) {//这里很重要,如果是两者相除会有很多答案 count++; return 1; } } else { return 1; } return 0; } void DFS(int n) { int i=0; if(n>=13) { return ; } for(; i<13; i++) { if(!visited[i]) { visited[i]=1; num[n]=i+1; if(!test(n)) {//如果不符合要求即剪枝 visited[i]=0; continue; } DFS(n+1); visited[i]=0; } } return ; } int main() { DFS(0); cout<


【寒假作业-----蓝桥杯】

    推荐阅读