import java.io.*; public class Comb { public void combine(int[] list, int k, int l, int r, int n) { if (k + l > n + 1) return; if (l == 0) { for (int i = 0; i < r; i++) System.out.print(list[i] + " "); System.out.println(); return; } list[r - l] = k; combine(list, k + 1, l - 1, r, n); if (k + l <= n) combine(list, k + 1, l, r, n); } public static void main(String[] args) throws NumberFormatException, IOException { Comb obj = new Comb(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Please input n: "); int n = Integer.parseInt(br.readLine()); System.out.println("Please input r: "); int r = Integer.parseInt(br.readLine()); int[] list = new int[r]; int k = 1; int l = r; obj.combine(list, k, l, r, n); } }import java.io.*;
public class Choose { int init[]; int end[]; int n; int m; BufferedReader in; public Choose() { in=new BufferedReader(new InputStreamReader(System.in)); n=getInput("Please enter the totle number n ( that is 1~n and n>0 ) : "); m=getInput("Please enter the number of integers to be selected m ( 0<m<=n ) : "); while(n<m) m=getInput("Wrong!! Attention m<=n !!\n Please enter the number of integers to be selected m ( 0<m<=n ) : "); init=new int[n]; for(int i=1;i<=n;i++) init[i-1]=i; end=new int[m]; } public static void main(String arf[]) { Choose demo=new Choose(); System.out.println("--------递 归--------"); demo.choose1(0,0); System.out.println("--------非递归--------"); demo.choose2(); } //递归算法-------------------------- public void choose1(int k,int l) { if(l==m) { for(int i=0;i<m;i++) System.out.print(end[i]+" "); System.out.println(); } else if(n-k==m-l) { for(int i=0;i<m-l;i++) end[l+i]=init[k+i]; for(int i=0;i<m;i++) System.out.print(end[i]+" "); System.out.println(); } else { end[l]=init[k]; choose1(k+1,l+1); choose1(k+1,l); } } //非递归算法---------------- public void choose2() { int trace=0; for(int i=0;i<n;) { if(n-i==m-trace) { for(int j=0;j<m-trace;j++) end[trace+j]=init[i+j]; for(int j=0;j<m;j++) System.out.print(end[j]+" "); System.out.println(); if(trace==0) break; i=end[--trace]; } else if(trace==m) { for(int j=0;j<m;j++) System.out.print(end[j]+" "); System.out.println(); i=end[--trace]; } else end[trace++]=init[i++]; } } //--------------------------------- public int getInput(String info) { int temp=0; System.out.print("\n"+info); try { temp=Integer.parseInt(in.readLine()); } catch(Exception e) { System.out.println("Wrong!! Input again!!"); return getInput(info); } if(temp<=0) { System.out.println("\nWrong!! Should grater than 0 !"); return getInput("Enter again : "); } else return temp; } }