题目描述

在2行5列的格子中填入1到10的数字。
要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。
如下图所示的2种,就是合格的填法。
请你计算一共有多少种可能的方案。

输出

请输出该整数,不要输出任何多余的内容

法一:
代码如下:

#include <iostream>
using namespace std;
bool vis[12];
int a[12][12], ans = 0;bool check(int x, int y) {if (x == 0) {if (a[x][y] > a[x][y - 1] || y == 0) {return true;}}if (a[x][y] > a[x][y - 1] && a[x][y] > a[x - 1][y] || y == 0 && a[x][y] > a[x - 1][y])return true;return false;
}void dfs(int x, int y) {if (x == 2)ans++;for (int i = 1; i <= 10; i++) {a[x][y] = i;if (!vis[i]) {if (check(x, y)) {vis[i] = true;if (y == 4) {dfs(x + 1, 0);} else {dfs(x, y + 1);}vis[i] = false;}}}
}int main() {dfs(0, 0);cout << ans << endl;return 0;
}

法二:
代码如下:

#include <iostream>
#include <algorithm>
using namespace std;int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int ans;bool check() {if (a[1] > a[0] && a[2] > a[1] && a[3] > a[2] &&a[4] > a[3] && a[6] > a[5] && a[7] > a[6] &&a[8] > a[7] && a[9] > a[8] && a[5] > a[0] &&a[6] > a[1] && a[7] > a[2] && a[8] > a[3] &&a[9] > a[4]) {return true;}return false;
}int main() {do {if (check())ans++;} while (next_permutation(a, a + 10));cout << ans << endl;return 0;
}

next_permutation()的错误使用导致错误
样例代码如下:

#include <iostream>
#include <algorithm>
using namespace std;int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int ans;bool check() {//数组下标从0开始,这里却从1开始,导致错误if (a[2] > a[1] && a[3] > a[2] && a[4] > a[3] &&a[5] > a[4] && a[7] > a[6] && a[8] > a[7] &&a[9] > a[8] && a[10] > a[9] && a[6] > a[1] &&a[7] > a[2] && a[8] > a[3] && a[9] > a[10] &&a[10] > a[5]) {return true;}return false;
}int main() {do {if (check())ans++;} while (next_permutation(a, a + 10));cout << ans << endl;return 0;
}

在这里可以刷一下同样可以用next_permutation()函数AC的题目:
[蓝桥杯2016初赛]方格填数

[蓝桥杯2017初赛]纸牌三角形

蓝桥杯2015决赛-方格填数-枚举 or dfs相关推荐

  1. [蓝桥杯2015决赛]五星填数-枚举+数论

    解题思路: 对于一种符合题意的情况,旋转和对称之后结果也是一样,所以我们要除去旋转(/5)和对称(/2)的情况,所以结果要除以10 代码如下: #include <iostream> #i ...

  2. [蓝桥杯2016初赛]方格填数-next_permutation

    代码如下: #include <iostream> #include <algorithm> using namespace std;int main() {int a[10] ...

  3. 16年蓝桥杯省赛-方格填数(dfs+回溯)

    如下的10个格子(图片在压缩文件里) 填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 思路:这道题目其实思路蛮 ...

  4. [蓝桥杯2016初赛]方格填数

    正如题目,我们要保证相邻的数不相连就行了,一共要填十个数. 下面是我的思路,供大家参考一下, 我把上面的各子放进了这个5*6的矩形,其中标记1–10的分别是要填数的各格子,一开始我先初始化这个二维数组 ...

  5. [蓝桥杯2016决赛]七星填数-next_permutation枚举

    题目描述 如下图所示: 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏.要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字.请计算其它位置要填充的数字,答案唯一. 填好后,请提 ...

  6. [蓝桥杯2015决赛]积分之迷-枚举(水题)

    题目描述 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C. 为了促销,每件商品都会返固定的积分. 小明开业第一天收到了三笔订单: 第一笔:3个A + 7个B + 1个C,共返积分:315 第二笔 ...

  7. [蓝桥杯2015决赛]胡同门牌号-模拟+枚举

    题目描述 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有趣的事情: 如果除去小明家不算,胡同里的其它门牌号加起来,刚好是10 ...

  8. 1265: [蓝桥杯2015决赛]四阶幻方

    题目链接:1265: [蓝桥杯2015决赛]四阶幻方 题目描述 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固 ...

  9. c语言六角填数蓝桥杯答案,六角填数(全排列)蓝桥杯真题

    六角填数(全排列)蓝桥杯真题 六角填数(全排列)蓝桥杯真题 如图所示六角形中填入1-12的数字,使每条直线上的数字和相等,图中已经填好了3个数字,请你计算*号数字是多少 蓝桥杯老套路,经常这样考全排列 ...

最新文章

  1. hust1350Trie【字典树+dfs || 字典树 + LCA】
  2. 研发日烧6400万的百度发出新讯号,李彦宏:自动驾驶订单已是全球第一
  3. 批次管理的质量跟踪案例分享_食品加工行业
  4. 复习支持向量机(SVM)没空看书时,掌握下面的知识就够了
  5. C++模拟键盘操作窗口入门
  6. Oracle配置监听要注意的地方
  7. Spring Boot下无法加载主类 org.apache.maven.wrapper.MavenWrapperMain问题解决
  8. 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?
  9. Bootstrap3 如何防止插件冲突
  10. 多大的计算机科学,科学网—大家计算机的屏幕尺寸都是多大的? - 刘洋的博文...
  11. 中国电信第三大IDC机房落户南海
  12. java课程设计实验报告_《java课程设计实验报告.doc
  13. matlab建模和仿真实验,MATLAB-Simulink系统建模与仿真-实验报告
  14. 红颜知己和蓝颜知己的区别
  15. 无法识别的usb跟这台计算机,【实战成功】无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别...
  16. matlab之经验分布图
  17. dsa数字签名c语言编程,对文件进行DSA数字签名
  18. 生日快乐app(从无到有)
  19. android布局中垂直居中,在Android中垂直居中视图
  20. 中国总裁唐骏:说出微软的秘密

热门文章

  1. ASP.NET MVC下的四种验证编程方式
  2. 剑指offer之二叉树的下一个结点
  3. 如何解决secureCRT里面的The remote system refused the connection.
  4. Android之常用开发框架
  5. Android之Color颜色值和RGB颜色对照表
  6. python mysql数据库_Python3中操作MySQL数据库
  7. 微信改成右滑删除_手机文件数据恢复,怎样恢复已过期的微信附件呢?
  8. 越绿自己,就会越强?
  9. 物理学上最厉害的54个男人!2400年来难以超越,没想到聚在一起后这么震撼......
  10. java搜索string_java – 在数组列表中搜索最常见的String