第七届蓝桥杯 寒假作业

转载请注明出处: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 }

答案:

如果本文对你有帮助,麻烦给个👍,谢谢啦。。。。。。。

 

 

 

posted @ 2018-01-27 11:56  nefuer  阅读(662)  评论(0编辑  收藏  举报