2015 第六届 蓝桥杯省赛 手链样式

2015 第六届 蓝桥杯省赛 手链样式

题目:

手链样式

小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?

请你提交该整数。不要填写任何多余的内容或说明性的文字。

题解:

package lq;

import java.util.HashSet;

public class BraceletStyle {
   static char[] color={'r','w','y'};
   static int[] co={3,4,5};
   static int len=12;
   static HashSet<String> set=new HashSet<String>();
   //static int [] a=new int[]{1,1,1,1};

   static boolean pd(String s){
       String ds=s+s;;//把字符串拼接成两段,取长度为len的子串,模拟随意转动的效果
       for(int i=0;i<len;i++){
           String tmp=ds.substring(i,i+len);
           if(set.contains(tmp))
               return false;

           StringBuilder bs=new StringBuilder(tmp);//翻转
            tmp=bs.reverse().toString();
            if(set.contains(tmp))
               return false;
       }

      /* StringBuilder bs=new StringBuilder(s);
        String tmp=bs.reverse().toString();
        if(set.contains(tmp))
           return false;*/
       return true;
   }

   static void dfs(String x){
       if(x.length()==12){
          // System.out.println(x);
           if(pd(x)){
               set.add(x);
           }

           return;
       }

       String tx=x;
       for(int i=0;i<3;i++){
           tx=x;
           if(co[i]!=0){
               tx+=color[i];
               co[i]--;
               dfs(tx);
               co[i]++;
           }
       }

   }

   public static void main(String[] args) {
           dfs("");
           System.out.println(set.size());
   }
}

答案:
1170

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值