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

第六节蓝桥杯 方格填数

程序员文章站 2022-07-10 18:06:15
转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8392793.html标题:方格填数在2行5列的格子中填入1到10的数字。要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。如【图1.png】所示的2种,就是合格的填法。请你计算一共有多少 ......

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8392793.html
标题:方格填数在2行5列的格子中填入1到10的数字。要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。如【图1.png】所示的2种,就是合格的填法。请你计算一共有多少种可能的方案。请提交该整数,不要填写任何多余的内容(例如:说明性文字)。

第六节蓝桥杯  方格填数           第六节蓝桥杯  方格填数

思路:我先做的第七届的题,这个题的思路和第七届的《第七届蓝桥杯 方格填数》《第七届蓝桥杯 寒假作业》思路是一样的。那也粘上代码。

代码运行结果:42

 

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <math.h>
 4 
 5 using namespace std;
 6 
 7 int ans=0;
 8 int a[2][5];
 9 int flag[15]={0};
10 bool Check(int x, int y)
11 {
12     if(x==0&&y==0)
13     return true;
14     if(x==0)
15     {
16         if(a[x][y-1]<a[x][y]) return true;
17     }
18     else
19     {
20         if(y==0)
21         {
22             if(a[x-1][y]<a[x][y]) return true;
23         }
24         else
25         {
26             if((a[x][y-1]<a[x][y])&&(a[x-1][y]<a[x][y])) return true;
27         }
28         
29     }
30     return false;
31 }
32 void dfs(int x, int y)
33 {
34     if(x==2)
35     {
36         ans++;
37         return;
38     }
39     for(int i=1; i<=10; i++)
40     {
41         if(flag[i]==0)
42         {
43 
44           a[x][y]=i;
45           flag[i]=1;
46           if(Check(x,y))
47           {
48             if(y<4) dfs(x,y+1);
49             else dfs(x+1,0);
50           }
51           flag[i]=0;
52         }
53     }
54 }
55 
56 int main()
57 {
58     dfs(0,0);
59     cout<<ans;
60     return 0;
61 }