把33个数取8个数成为一个数组,把数组(长度为8)赋值到一个enum
然后在enum型中任意取6个数成为数组,就象排列组合一样。8取6,总共有56个不同的数组,取完为止。
这个算法怎么写?

解决方案 »

  1.   

    连enum都出来了,作业?
    先随机取8个
    然后搜一段排列组合的代码就可以解决了
      

  2.   


    Collections.shuffle(list)具体调用看API去
      

  3.   

    随即生成的,要靠它碰运气似乎有点难,看一下能否对你有帮助:import java.util.Random;public class B { public static void main(String [] args){
    //初始化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++;   
    }
    }   
    }    
    }
      

  4.   

    "把33个数取8个数成为一个数组,把数组(长度为8)赋值到一个enum
    然后在enum型中任意取6个数成为数组,就象排列组合一样。8取6,总共有56个不同的数组,取完为止。 "
    其中的“把33个数取8个数成为一个数组”不清楚,随机抽取?只要一个数组?还是要33个数中任意抽取8个的所有数组?
      

  5.   

    为嘛非得放在enum里?不嫌麻烦吗?
      

  6.   

    import java.util.*;public class test {
    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]
      

  7.   

    不好意思,是我错了。是28个
    呵呵
    lili
    你得分咯