您的位置:首页 > Web前端 > CSS

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

2017-05-23 18:22 211 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: