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;
}
}