92. 递归实现指数型枚举
题目链接https://www.acwing.com/problem/content/94/
解法一:二进制
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
cout<<endl;
for(int i=1;i<(1<<n);i++){
int x=i;
int j=0;
while(x){
int t=x&1;
j++;
if(t){
cout<<j<<" ";
}
x=x>>1;
}
cout<<endl;
}
return 0;
}
解法二:dfs
#include<iostream>
using namespace std;
int n;
bool vis[20];
int a[20];
void dfs(int x,int s){//x是数组a中有几个元素,s是从哪个数开始
for(int i=s;i<=n;i++){
a[x]=i;
for(int j=0;j<=x;j++)
cout<<a[j]<<" ";
cout<<endl;
dfs(x+1,i+1);
}
}
int main(){
cin>>n;
cout<<endl;
dfs(0,1);
return 0;
}