欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第七届蓝桥杯 寒假作业

程序员文章站 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 }

答案:

第七届蓝桥杯   寒假作业

如果本文对你有帮助,麻烦给个