第七届蓝桥杯 寒假作业
程序员文章站
2022-06-27 19:41:54
转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8365430.html寒假作业 现在小学的数学题目也不是那么好玩的。看看这个寒假作业,每个方块代表1~13中的某一个数字,但不能重复。 □ + □ = □ □ - □ = □ □ × □ = □ □ ......
转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8365430.html
寒假作业
现在小学的数学题目也不是那么好玩的。看看这个寒假作业,每个方块代表1~13中的某一个数字,但不能重复。
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
比如: 以及:
6 + 7 = 13 7 + 6 = 13
9 - 8 = 1 9 - 8 = 1
3 * 4 = 12 3 * 4 = 12
10 / 2 = 5 10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)你一共找到了多少种方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
这个代码没有注释,但是思路和上一篇一样,想要了解思路可以研究一下这个代码,也可以看一下我的上一篇随笔《第七届蓝桥杯 方格填数》。接下来粘上代码。
1 #include <iostream> 2 #include <algorithm> 3 #include <math.h> 4 5 using namespace std; 6 int a[4][4], flag[14]={0}; 7 int ans=0; 8 9 bool Check(int x, int y, int i) 10 { 11 if(y==0) return true; 12 int tem; 13 switch(x) 14 { 15 case 0: 16 tem=a[x][y]+a[x][y-1]; 17 break; 18 case 1: 19 tem=a[x][y]-a[x][y-1]; 20 break; 21 case 2: 22 tem=a[x][y]*a[x][y-1]; 23 break; 24 case 3: 25 if(a[x][y-1]%a[x][y]!=0) 26 return false; 27 else tem=a[x][y-1]/a[x][y]; 28 break; 29 } 30 if(flag[tem]==0&&tem>=1&&tem<=13) 31 { 32 flag[tem]=1; 33 a[x][y+1]=tem; 34 return true; 35 } 36 else return false; 37 } 38 39 void dfs(int x, int y) 40 { 41 if(x==4) 42 { 43 ans++; 44 /*for(int i=0; i<4; i++) 45 { 46 for(int j=0; j<3; j++) 47 { 48 cout<<a[i][j]<<" "; 49 } 50 cout<<endl; 51 } 52 cout<<endl<<endl;*//*注释部分为打印复合要求的数字填写情况*/ 53 return; 54 } 55 for(int i=1; i<=13; i++) 56 { 57 if(!flag[i]) 58 { 59 a[x][y]=i; 60 flag[i]=1; 61 bool check=Check(x,y,i); 62 if(check) 63 { 64 if(y==0) 65 dfs(x, y+1); 66 else 67 dfs(x+1, 0); 68 } 69 if(check) 70 { 71 flag[i]=0; 72 flag[a[x][y+1]]=0; 73 } 74 else 75 flag[i]=0; 76 } 77 78 } 79 } 80 81 int main() 82 { 83 dfs(0,0); 84 cout<<ans; 85 return 0; 86 }
答案:
如果本文对你有帮助,麻烦给个
上一篇: 福建十大名校:福建农林大学上榜,第九已有125年历史
下一篇: 基于Redis的分布式锁的简单实现