m个数随机取n个数的java实现

//借用他人的C语言版本改成java版本 同时懒懒地增加了顺序输出结果
 
 static int total = 0;
 
 static void cur(int k, int m, int n, List usedList, List resultList, List arrayList)
 {
     if (k<n)
     {
         for (int x=0;x<m;x++)
         {
             if ((Integer)usedList.get(x)==0)//not used
             {
              usedList.set(x, 1);
              resultList.set(k,arrayList.get(x));
                 //递归
                 cur(k+1,m,n, usedList, resultList, arrayList);
                 //递归未调用递归时(即k>=0||x!=0)执行这一句
                 usedList.set(x, 0);
             }
         }
     }
     else
     {
//      随机排列结果全集输出
//      ++total;
//         for (int i=0;i<n;i++){
//          System.out.print(resultList.get(i));
//         }
//         System.out.println();
      
//      判断从小到大排列的,输出
      int temp = -2;
         for(int j=0;j<n;j++){
          if(temp<(Integer)resultList.get(j)){
           temp = (Integer)resultList.get(j);
           if(j==n-1){
            ++total;
            temp = -2;
               for (int i=0;i<n;i++){
             System.out.print(resultList.get(i));
            }
               System.out.println();
           }
          }else{
           //此结果不予输出
           break;
          }
         }
     }
 }

 

 public static void main(String[] args) { 
  int m=10;
  int n=6;
  //10个数字内取6个乱序:6*5*4*3*2*1*((10*9*8*7)/(4*3*2*1))
  List arrayList  = new ArrayList();
  List usedList  = new ArrayList();
  List resultList  = new ArrayList();
  for(int i=0;i<m;i++){
   arrayList.add(i);
  }
  for(int i=0;i<m;i++){
   usedList.add(0);
  }
  for(int i=0;i<n;i++){
   resultList.add(-1);
  }
     cur(0,m,n,usedList,resultList,arrayList);
    
     System.out.println("total:"+total);
 }
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值