当前位置:   article > 正文

蓝桥杯填空题——剪邮票_剪邮票蓝桥杯

剪邮票蓝桥杯


如下面第一张图, 有12张连在一起的12生肖的邮票。

现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
具体例子比如第二张,第三张图中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。


思路:先找到5个数的组合,然后从第一个数字开始遍历,经过上下左右操作检测5个数是否都被访问一遍,如果5个数都可以遍历到则种类+1。

在原图中向上为-4,向下为+4,向左为-1,向右为+1,但是遇到3 4 5 7 8这种4+1=5但是这种情况不符合,所以重构一下原图:

 

这样,向上为-5,向下为+5,向左为-1,向右为+1,避免了每行最后一个+1后等于下一行第一个的情况。


解题代码:

  1. #include <iostream>
  2. using namespace std;
  3. int mp[12]= {1,2,3,4,6,7,8,9,11,12,13,14};
  4. int aa[5],vis[5],sum=0;
  5. int b[4]= {-1,1,-5,+5};
  6. void dfs(int n)
  7. {
  8. for(int i=0; i<4; i++)
  9. {
  10. int t=aa[n]+b[i];
  11. if(t<1||t>14||t==5||t==10) continue;
  12. for(int j=0; j<5; j++)
  13. if(!vis[j]&&aa[j]==t)
  14. {
  15. vis[j]=1;
  16. dfs(j);
  17. }
  18. }
  19. }
  20. int main()
  21. {
  22. for(int a=0; a<12; a++)
  23. for(int b=a+1; b<12; b++)
  24. for(int c=b+1; c<12; c++)
  25. for(int d=c+1; d<12; d++)
  26. for(int e=d+1; e<12; e++)
  27. {
  28. aa[0]=mp[a];
  29. aa[1]=mp[b];
  30. aa[2]=mp[c];
  31. aa[3]=mp[d];
  32. aa[4]=mp[e];
  33. for(int i=0; i<5; i++)
  34. vis[i]=0;
  35. vis[0]=1;
  36. dfs(0);
  37. int flag=1;;
  38. for(int i=0; i<5; i++)
  39. {
  40. if(vis[i]!=1)
  41. {
  42. flag=0;
  43. break;
  44. }
  45. }
  46. if(flag==0) continue;
  47. else
  48. sum++;
  49. }
  50. cout<<sum<<endl;
  51. return 0;
  52. }

正确答案为:116种


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/421281
推荐阅读
相关标签
  

闽ICP备14008679号