您的位置:首页 > 其它

一个排列组合的问题

2009-07-28 10:26 316 查看
给定六个数字:1、2、3、3、5、6,试编程求出满足下述要求的,用这六个数字组成的6位数的个数:

1) 两个数字3不能相邻,例如653321不允许

2) 数字5不能在第5位,例如132356不允许

我写了个运用穷举法进行筛选的代码,呵呵,感觉实现得很不优雅……

public class Test {

public static void main(String[] args) {
int num=0;
int[] arr={1,2,3,4,5,6}; //先把3换成4初筛

for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
if(j==i)
continue; //如果数组的这个位置已经占了,跳出循环
for(int k=0;k<6;k++){
if(k==i||k==j)
continue;
for(int l=0;l<6;l++){
if(l==i||l==j||l==k)
continue;
for(int m=0;m<6;m++){
if(m==i||m==j||m==k||m==l)
continue;
for(int n=0;n<6;n++){
if(n==i||n==j||n==k||n==l||n==m)
continue;
String str=""+arr[i]+arr[j]+arr[k]+arr[l]+arr[m]+arr
; //形成数字串
if(str.indexOf("5")==4) //去掉数字5在位置5的
continue;
if(str.indexOf("4")>str.indexOf("3")) //数字3、数字4交换位置的只取一个
continue;
str=str.replace('4','3'); //数字4换成数字3
if(str.indexOf("33")>=0)
continue; //去掉33相邻的数字串
num++;
System.out.print(str+" ");
if(num%10==0)
System.out.println();
}
}
}
}
}
}
System.out.println(num+"个");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: