来源:JK老班
组合另一种方法
降序输出
import java.util.Scanner;
//组合:降序输出
public class Main {
int n,m;
int[] A;
public Main() {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();m=sc.nextInt();
A=new int[m];
Search(n,0);
}
void Search(int i,int count) {//现在是第几层,已经选了几个数
if(count==m) {//选够了就输出
for(int a:A)
System.out.print(a+" ");
System.out.println();
return;
}
if(i<1) return;//一直都不选,要保证不能越界
A[count]=i; Search(i-1,count+1);//选i
Search(i-1,count);//不选i
// 位置换一下?先不选,再选
// Search(i-1,count);//不选i
// A[count]=i; Search(i-1,count+1);//选i
}
public static void main(String[] args) {
Main m=new Main();
}}
升序输出
import java.util.Scanner;
//组合:升序输出
public class Main1 {
int n,m;
int[] A;
public Main1() {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();m=sc.nextInt();
A=new int[m];
Search(1,0);
}
void Search(int i,int count) {//现在是第几层,已经选了几个数
if(count==m) {//选够了就输出
for(int a:A)
System.out.print(a+" ");
System.out.println();
return;
}
if(i>n) return;//一直都不选,要保证不能越界
A[count]=i; Search(i+1,count+1);//选i
Search(i+1,count);//不选i
}
public static void main(String[] args) {
Main1 m=new Main1();
}}