首页 > 编程 > Java > 正文

2016年蓝桥杯A组java第七题

2019-11-08 02:22:51
字体:
来源:转载
供稿:网友
/** * @author Administrator *剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

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

思路:随机选出5个数,对所有组进行筛选

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

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

 

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

 */public class youPiao {static int mp[]= {1,2,3,4,6,7,8,9,11,12,13,14};  static int[] aa=new int[5];static int[] vis=new int[5];static int sum=0;  static int[] b= {-1,1,-5,+5};public static void dfs(int n){for(int i=0;i<4;i++){int tem=aa[n]+b[i];if(tem<1||tem>14||tem==5||tem==10)continue;for(int j=0;j<5;j++){if(vis[j]==0&&tem==aa[j]){vis[j]=1;dfs(j);}}}}public static void main(String[] args) {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 j=0;j<5;j++){if(vis[j]==0){flag=0;break;}}if(flag==0)continue;else{sum++;} }}}}}System.out.PRintln(sum);}}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表