把33个数取8个数成为一个数组,把数组(长度为8)赋值到一个enum
然后在enum型中任意取6个数成为数组,就象排列组合一样。8取6,总共有56个不同的数组,取完为止。
这个算法怎么写?
然后在enum型中任意取6个数成为数组,就象排列组合一样。8取6,总共有56个不同的数组,取完为止。
这个算法怎么写?
解决方案 »
- hibernate search 查出数据始终为0 求解释啊
- 请教:Map复制时出现一个Swingutilities2错误?
- C++转Java
- 共产生了3个socket,那么,通信过程中是哪两个socket在通信呢?
- 说得简单通俗点,介绍一下Struts和Spring
- 关于正则表达式的奇怪问题!!
- 请问如何在java的菜单项上添加图标~~!!
- 今天编写拉个打开文件的简单程序用到拉I/O流 可是用程序来打开文件不行可以帮我看看吗谢谢 我分快没拉所以给的不多不过重在交流嘛!:)
- 难道在WIN2000上浏览有JAVA APPLET的网页就必须装JRE么?
- 关于饿汉式的一个小问题
- 写一个静态方法,两个int参数,交换传进来的参数
- int是integer类吗?
先随机取8个
然后搜一段排列组合的代码就可以解决了
Collections.shuffle(list)具体调用看API去
//初始化33个自然数
int [] iniArray = new int[33];
for(int i = 33 ; i>0 ; i--){
iniArray[i-1] = i ;
}
//取8个数字放入一个数组
int [] myEnum = new int[8] ;
Random random = new Random() ;
for(int i = 8 ; i>0 ; i--){
int rand = random.nextInt(8);
myEnum[i-1]=iniArray[rand] ;
}
//从myEnum中取6个数,排列组合,放入数组
Sort sort = new Sort(myEnum,6);
sort.doSort(1);
}
}/**
* 排列组合
* @author Administrator
*
*/
class Sort {
int [] result;
int [] temp;
int len;
int[] flag; public Sort(int []temp,int len) {
result = new int [len+1];
this.temp=temp;
this.len=len;
flag=new int[len+1];
for(int i=len - 1 ;i >= 0 ; i--){
flag[i]=0;
} } public void doSort(int k) {
if(k>len){
for(int i=1 ; i<=len ; i++){
System.out.print(""+result[i]);
}
System.out.println();
}else{
int j=1;
while(j<=len) {
if(flag[j]==0) {
result[k]=temp[j];
flag[j]=1;
doSort(k+1);
flag[j]=0;
}
j++;
}
}
}
}
然后在enum型中任意取6个数成为数组,就象排列组合一样。8取6,总共有56个不同的数组,取完为止。 "
其中的“把33个数取8个数成为一个数组”不清楚,随机抽取?只要一个数组?还是要33个数中任意抽取8个的所有数组?
public test() {
//得到8个数的数组。
List<Integer> list8=Get8From33();
//产生56个组合。
for (int i=0;i<8;i++){
for (int j=i+1;j<8;j++)
{
List<Integer> list6=new ArrayList<Integer>();
for (int m=0;m<8;m++)
if (m!=i&&m!=j)
list6.add(list8.get(m));
Collections.sort(list6);
//已经产生了一个6个数的数组。
System.out.println(list6);
}
}
}
//交换List里,指定索引的两个元素。
void Swip(List<Integer> list,int m,int n)
{
Integer temp = list.get(m);
list.set(m,list.get(n));
list.set(n,temp);
}
//从33个数中得到8个数。
List<Integer> Get8From33() {
List<Integer> list33 = new ArrayList<Integer>();
for(int i=0;i<33;i++)
list33.add(i+1);
//随机的交换list33中的元素若干次。
for (int i=0;i<100;i++){
int m=(int)(Math.random()*list33.size());
int n=(int)(Math.random()*list33.size());
Swip(list33,m,n);
}
return list33.subList(0,8);
} public static void main(String[] args) {
new test();
}
}
结果示例:[1, 2, 11, 21, 24, 28]
[1, 4, 11, 21, 24, 28]
[1, 2, 4, 11, 21, 24]
[1, 2, 4, 11, 21, 28]
[1, 2, 4, 21, 24, 28]
[1, 2, 4, 11, 24, 28]
[2, 4, 11, 21, 24, 28]
[1, 11, 21, 23, 24, 28]
[1, 2, 11, 21, 23, 24]
[1, 2, 11, 21, 23, 28]
[1, 2, 21, 23, 24, 28]
[1, 2, 11, 23, 24, 28]
[2, 11, 21, 23, 24, 28]
[1, 4, 11, 21, 23, 24]
[1, 4, 11, 21, 23, 28]
[1, 4, 21, 23, 24, 28]
[1, 4, 11, 23, 24, 28]
[4, 11, 21, 23, 24, 28]
[1, 2, 4, 11, 21, 23]
[1, 2, 4, 21, 23, 24]
[1, 2, 4, 11, 23, 24]
[2, 4, 11, 21, 23, 24]
[1, 2, 4, 21, 23, 28]
[1, 2, 4, 11, 23, 28]
[2, 4, 11, 21, 23, 28]
[1, 2, 4, 23, 24, 28]
[2, 4, 21, 23, 24, 28]
[2, 4, 11, 23, 24, 28]
呵呵
lili
你得分咯