现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图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
就算两种解法。(加法,乘法交换律后算不同的方案)
代码:
#include <iostream>
#include <string>
using namespace std;
int map[4][3];
bool visit[14];
int sum=0;
bool check(int x,int y,int val){
if(y==2){
if(x==0)return (map[x][0]+map[x][1]==val);
else if(x==1)return (map[x][0]-map[x][1]==val);
else if(x==2)return (map[x][0]*map[x][1]==val);
else if(x==3)return (val * map[x][1] == map[x][0]);//如果此处用除法,除不尽的情况下会把浮点数强制转化为整形,出现错误。
else return false;
}
else return true;
}
void dfs(int x,int y){
if(x==4) {
sum++;
return;
}
for(int i=1;i<=13;i++){
if(!visit[i] && check(x,y,i)){
visit[i]=true;
map[x][y]=i;
dfs(x+(y+1)/3,(y+1)%3);
visit[i]=false;
}
}
}
int main(){
for(int i=1;i<14;i++)
visit[i]=false;
dfs(0,0);
cout<<sum;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务