从键盘输入两个自然数N,R(N>R),要求输入从N到1中按降序顺序取R个自然数的所有组合个数。
输入:N=5,R=3
输出:543,542,541,532,531,521,432,431,421,321
Total=10

解决方案 »

  1.   


    public class Test { public static int total = 0;

    public static void main(String[] args) {
    method(5,3);
    }

    public static void method(int n, int r){
    if(n <= r) return;
    inner(n, 0, new int[r]);
    System.out.println("Total: " + total);
    }

    private static void inner(int num, int index, int[] arr){
    if(index == arr.length){
    for (int i = 0; i < arr.length; i++) {
    System.out.printf("%d ", arr[i]);
    }
    System.out.println();
    total++;
    }else{
    for (int i = num; i >= arr.length - index; i--) {
    arr[index] = i;
    inner(i - 1, index + 1, arr);
    }
    }
    }
    }
      

  2.   

     inner(i - 1, index + 1, arr);
    用的很强大!
      

  3.   


    public class Test {
    public static void main(String args[]) {
    new Test().go(5, 3);
    }

    public void go(int startnumber, int length) {
    for(int i = startnumber; i >= length; i--) {
    generate("", i, length);
    }
    } public void generate(String prenumber, int startnumber, int length) {
    if(length == 2) {
    for(int i = startnumber - 1; i > 0; i--) {
    System.out.println(prenumber + startnumber + "" + i);
    }
    } else {
    for(int i = startnumber - 1; i >= length - 1; i--) {
        generate(prenumber + String.valueOf(startnumber), i, length - 1);
    }
    }
    }
    }递归的话定义一个嵌套讯混
    generate(5, 3) = 5 + generate(4, 2)
                     5 + generate(3, 2)
                     5 + generate(2, 2)
    而generate(startnumber, length)
    在这里的概念是生成以startnumber为起始的length个数的所有序列