如果给你五个数12345,任意取出三个数,有多少中取法?并把各个三位数打印出来。这个用for循环嵌套可以搞定,现在看下面的问题。
现在是给了五个数,如果给的数字的个数是动态的(就是说给的数字的个数不是固定的,这样for循环的个数不同),又该如何取?

解决方案 »

  1.   

    google “ java 全排列 ”
      

  2.   

    其实,数字的个数是动态的,这个并不是什么问题,办法和5个个位数是一样的,只是要考虑5个数中有重复数字的情况,需要排除掉,不能重复计算,例如:五个数字是abcde,但其中d和e是相同的数字,那么选中abd和选中abe就是同一种选法,不能统计为2种。
      

  3.   


      package CSDN;  
        
      import java.util.ArrayList;  
      import java.util.Arrays;  
      import java.util.List;  
          public class FullSort {  
          //将NUM设置为待排列数组的长度即实现全排列  
          private static int NUM = 3;  
          private static int count = 0;
        
          /** 
           * 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列 
           * 
           * @param datas 
           * @param target 
           */  
          private static void sort(List datas, List target) {  
              if (target.size() == NUM) {  
                  for (Object obj : target)  
                      System.out.print(obj);  
                  System.out.println();  
                  return;  
              }  
              for (int i = 0; i < datas.size(); i++) {  
                  List newDatas = new ArrayList(datas);  
                  List newTarget = new ArrayList(target);
                 
                  newTarget.add(newDatas.get(i));  
                  newDatas.remove(i);  
                  sort(newDatas, newTarget);  
              }  
              count++;
          }  
        
          public static void main(String[] args) {  
              String[] datas = new String[] { "a", "b", "c", "d" };  
              sort(Arrays.asList(datas), new ArrayList());  
              System.out.println("一共有" + count + "种排序次数");
          }  
        
      }楼主参照一下  这个算法
      

  4.   

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Scanner;
    import java.util.Set;public class Test34 { public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    Integer num = s.nextInt();
    String str = num.toString(); 
    Set set = new HashSet();
    for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
    if(i !=j){
    for(int k=0;k<5;k++){
    if(j != k && i != k){
    int n = Integer.parseInt(str.charAt(i) + "" + str.charAt(j) + "" + str.charAt(k));
    set.add(n);
    }
    }
    }
    }
    }
    Iterator i = set.iterator();
    while(i.hasNext()){
    System.out.println(i.next());
    }
    }}