给定10个数字,列出其所有组合!不能重复注意是 列出,不是计算值例如c10 6 就是有10个数字,取其中6个 做组合,不重复!这个怎么搞?谁来点代码最好

解决方案 »

  1.   


    import java.util.ArrayList;   
    import java.util.Arrays;   
    import java.util.List;   
    import java.util.Scanner;
    public class FullSort {   
        //将NUM设置为待排列数组的长度即实现全排列   
        private static int NUM = 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);   
            }   
        }   
      
        public static void main(String[] args) {   
         Scanner input = new Scanner(System.in);
         System.out.println("请输入X个数,用逗号分割:");
         String str = input.nextLine();
            String[] datas = str.split(",");   
            System.out.println("请输入数字Y:");
            NUM = input.nextInt();
            if(NUM > datas.length) {
             System.out.println("输入的Y必须小于等于X!");
             return;
            }
            sort(Arrays.asList(datas), new ArrayList());   
        }   
      
    }  网上找的!
      

  2.   


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    import java.util.TreeSet;public class Combination {
    private static int NUM = 0;

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("请输入X个数,用逗号分割:");
    String str = input.nextLine();
    String[] datas = str.split(",");
    System.out.println("请输入数字Y:");
    NUM = input.nextInt();
    if (NUM > datas.length) {
    System.out.println("输入的Y必须小于等于X!");
    return;
    }
    combine(Arrays.asList(datas));
    } private static void combine(List<String> datas) {
    TreeSet<String> set = new TreeSet<String>();
    for(String str : datas) {
    set.add(str);
    }

    ArrayList<TreeSet<String>> subset = getSubset(set);

    for(TreeSet<String> ts : subset) {
    System.out.println(ts);
    }
    }

    public static String[] getBinaryValue(TreeSet<String> set) {
    int size = set.size();
    int m = (int) Math.pow(2, size) - 1;
    String[] result = new String[m + 1];
    for (int i = m; i > -1; i--) {
    StringBuffer sb = new StringBuffer(Integer.toBinaryString(i));
    int length = sb.length();
    if (length < size) {
    for (int j = 0; j < size - length; j++) {
    sb.insert(0, "0");
    }
    }
    result[i] = sb.toString();
    }
    return result;
    } public static ArrayList<TreeSet<String>> getSubset(TreeSet<String> set) {
    ArrayList<TreeSet<String>> result = new ArrayList<TreeSet<String>>();
    String[] items = new String[set.size()];
    int i = 0;
    for (String item : set) {
    items[i++] = item;
    }
    String[] binaryValue = getBinaryValue(set);
    for (int j = 0; j < binaryValue.length; j++) {
    String value = binaryValue[j];
    TreeSet<String> subset = new TreeSet<String>();
    for (int k = 0; k < value.length(); k++) {
    if (value.charAt(k) == '1')
    subset.add(items[k]);
    }
    if(subset.size() == NUM)
    result.add(subset);
    } return result;
    }
    }