蓝桥杯填空题——剪邮票
来源:互联网 发布:还原数据库一致性dbcc 编辑:程序博客网 时间:2024/04/29 10:09
如下面第一张图, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)
具体例子比如第二张,第三张图中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
思路:先找到5个数的组合,然后从第一个数字开始遍历,经过上下左右操作检测5个数是否都被访问一遍,如果5个数都可以遍历到则种类+1。
在原图中向上为-4,向下为+4,向左为-1,向右为+1,但是遇到3 4 5 7 8这种4+1=5但是这种情况不符合,所以重构一下原图:
这样,向上为-5,向下为+5,向左为-1,向右为+1,避免了每行最后一个+1后等于下一行第一个的情况。
解题代码:
#include <iostream> using namespace std; int mp[12]= {1,2,3,4,6,7,8,9,11,12,13,14}; int aa[5],vis[5],sum=0; int b[4]= {-1,1,-5,+5}; void dfs(int n) { for(int i=0; i<4; i++) { int t=aa[n]+b[i]; if(t<1||t>14||t==5||t==10) continue; for(int j=0; j<5; j++) if(!vis[j]&&aa[j]==t) { vis[j]=1; dfs(j); } } } int main() { for(int a=0; a<12; a++) for(int b=a+1; b<12; b++) for(int c=b+1; c<12; c++) for(int d=c+1; d<12; d++) for(int e=d+1; e<12; e++) { aa[0]=mp[a]; aa[1]=mp[b]; aa[2]=mp[c]; aa[3]=mp[d]; aa[4]=mp[e]; for(int i=0; i<5; i++) vis[i]=0; vis[0]=1; dfs(0); int flag=1;; for(int i=0; i<5; i++) { if(vis[i]!=1) { flag=0; break; } } if(flag==0) continue; else sum++; } cout<<sum<<endl; return 0; }
正确答案为:116种
0 0
- 蓝桥杯填空题——剪邮票
- 蓝桥杯——剪邮票
- 蓝桥杯填空题——奖券数目
- 蓝桥杯—剪邮票,对初学算法自己启发挺大的一题
- 蓝桥杯 剪邮票DFS
- 蓝桥杯_剪邮票
- 蓝桥杯-剪邮票
- 蓝桥杯 剪邮票
- 蓝桥杯2016:剪邮票
- 剪邮票 蓝桥杯
- 蓝桥杯:剪邮票
- 剪邮票----蓝桥杯
- 蓝桥杯填空题 —— 加法变乘法
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 剪邮票(结果填空)
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 剪邮票(结果填空)
- 蓝桥杯结果填空——扑克序列
- 蓝桥杯结果填空——生日蜡烛
- 蓝桥杯-结果填空题
- MySQL存储引擎
- vmware克隆虚拟机centos6.5,虚拟机从新配置
- hive提取等号后面的值
- Q&A——资源管理(六)
- Hbase学习
- 蓝桥杯填空题——剪邮票
- Android apk方法数量的检查和处理方法
- sql 查询优化方法
- poj 1472 Instant Complexity (递归模拟技巧)
- windows7配置wampserver2.5
- 实例化创建bean 和静态工厂创建bean
- PHP汉字转换拼音的函数代码
- ffmpeg处理RTMP流媒体的命令大全
- c语言字符数组与字符串的使用详解