题目解释:
输入一个数,将它的所有从小到大的可能都列出来。
数据范围1<=n<=15
输入样例:
3
输出样例:
3
2
2 3
1
1 3
1 2
1 2 3
题解:
这是一道经典的递归题目,我们首先画一个二叉树来分析问题。
根据二叉树分析我们很容易可以得出代码
#include<bits/stdc++.h>
using namespace std;
int n;
void f(int a,int state){
if(a==n){
for(int i=0;i<n;i++)
if(state>>i&1)
printf("%d ",i+1);
cout<<endl;
return;
}
f(a+1,state);
f(a+1,state+(1<<a));
}
int main(){
cin>>n;
f(0,0);
return 0;
}