题目描述
从 1∼n 这 n个整数中随机选出 m 个,输出所有可能的选择方案。
样例
数据范围
n>0
,
0≤m≤n
,
n+(n−m)≤25
输入样例:
5 3
输出样例:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int n, m;
int arr[N];
//与排列的区别,后一位一定比前一位大
void dfs(int x, int start) {
//填了x-1个数,如果后面剩余的位数(x-1)+(n-start+1)<r会有减枝
if((x-1)+(n-start+1)<m){
return;
}
if(x > m) {
for(int i=1;i<=m;i++){
printf("%d ",arr[i]);
}
cout<<"\n";
return;
}
for(int i = start; i <= n; i++) {
arr[x]=i;
dfs(x+1,i+1);
arr[x]=0;
}
}
int main() {
cin >> n >> m;
dfs(1, 1);
return 0;
}