第七届蓝桥杯B组试题(剪邮票)
2018-03-16 21:45
239 查看
剪邮票
如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
#include<iostream> #include<cmath> using namespace std; int count=0,f[20]; int find(int x) { if(f[x]!=x) f[x]=find(f[x]); return f[x]; } int judge(int s[])//判断是否相连 { for(int i=0;i<20;i++) f[i]=i; for(int i=0;i<5;i++) for(int j=i+1;j<5;j++) { if(s[i]==3&&s[j]==4||s[i]==7&&s[j]==8) continue; if(abs(s[i]-s[j])==1||abs(s[i]-s[j])==4) f[find(s[i])]=find(s[j]); } for(int i=1;i<5;i++)//如果5个数的共同祖先不是同一个,返回0,else返回1 if(find(s[i])!=find(s[0])) return 0; return 1; } int main() { int s[5]; 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++)//5个数的组合 { s[0]=a,s[1]=b,s[2]=c,s[3]=d,s[4]=e; if(judge(s)) count++; } cout<<count; }
相关文章推荐
- 第七届蓝桥杯【省赛试题7】剪邮票
- 第七届蓝桥杯【省赛试题7】剪邮票
- 蓝桥杯 第七届省赛试题 剪邮票
- 蓝桥杯第七届初赛试题 剪邮票
- 2016年第七届蓝桥杯试题(C/C++本科B组)1-8题
- 第七届蓝桥杯【省赛试题4】快速排序
- 第七届蓝桥杯b组第七题-剪邮票 题解二(全排列stl)
- 2016年第七届蓝桥杯省赛A组试题
- 剪邮票(第七届蓝桥杯b组原题)
- 第七届蓝桥杯【省赛试题1】煤球数目
- 第七届蓝桥杯【省赛试题5】抽签
- 蓝桥杯第七届剪邮票
- 第七届 蓝桥杯 省赛 第七题 剪邮票
- 第七届蓝桥杯省赛试题1 煤球数目(递推)
- 蓝桥杯 第七届省赛试题 煤球数目
- 第七届 蓝桥杯 【省赛试题3】 凑算式
- 蓝桥杯 第七届省赛试题 生日蜡烛
- 第七届蓝桥杯试题及答案(1-5题)
- [蓝桥杯] 第七届 C/C++ B组 剪邮票 ---- DFS
- 剪邮票-蓝桥杯第七届javaA组--12元素选5元素不重复