题目描述
从 1−n 这 n 个整数中随机选取任意多个,每种方案里的数从小到大排列,按字典序输出所有可能的选择方案。
输入
输入一个整数 n。(1≤n≤10)
输出
每行一组方案,每组方案中两个数之间用空格分隔。
注意每行最后一个数后没有空格。
样例输入
3
样例输出
1
1 2
1 2 3
1 3
2
2 3
3
样例输入2
4
样例输出2
1
1 2
1 2 3
1 2 3 4
1 2 4
1 3
1 3 4
1 4
2
2 3
2 3 4
2 4
3
3 4
4
AC代码
#include <iostream>
#include <cstdio>
using namespace std;
// 当前边的编号, 最大值, 层数,数组存值
void output(int ind,int n,int k, int *buff) {
if (ind == n) {
return;
}
//正序遍历
for (int i = ind+1; i <= n; i++) {
buff[k] = i;
//output(i, n, k + 1, buff);
for(int j = 0; j <= k;j++) {
//j == 0 || cout << " ";
if (j != 0) {
cout << " ";
}
cout << buff[j];
}
cout << endl;
output(i, n, k + 1, buff);
}
/*
// 倒序遍历
for (int i = n; i >= ind + 1; i--) {
buff[k] = i;
//output (i,n,k+1,buff);
for (int j = 0; j <=k; j++) {
j == 0 || cout << " ";
cout << buff[j];
}
cout << endl;
output (i,n,k+1,buff);
}
*/
return ;
}
int a[25];
int main() {
int n;
cin >> n;
output(0,n,0,a);
return 0;
}