1 条题解
-
-1
这道题有三种解法
1:正常解法
#include<bits/stdc++.h> using namespace std; const int N = 30; int a[N]; int n; long long ans; int main() { cin >> n; for(int i=1;i<=n;i++) { a[i]=i-1; } for(int i=0;i<(1<<n);i++) { for(int j=n-1;j>=0;j--) { if(i>>j&1) { cout << a[n-j] << " "; } } cout << '\n'; } return 0; }2:bitset解法
#include<bits/stdc++.h> using namespace std; const int N = 30; int a[N]; int n; int main() { cin >> n; for(int i=1;i<=n;i++) { a[i]= i-1; } for(int i=0;i<(1<<n);i++) { bitset<22> b(i); for(int j=n-1;j>=0;j--) { if(b[j]) { cout << a[n-j] << ' '; } } cout << '\n'; } return 0; }3:dfs解法
#include<bits/stdc++.h> using namespace std; const int N = 30; int a[N]; int n; void dfs(int depth,string s) { if(depth > n) { for(int i=0;i<s.size();i++) { if(s[i] == '1') { cout << a[i+1] << ' '; } } cout << '\n'; return; } dfs(depth+1,s+"0"); dfs(depth+1,s+"1"); } int main() { cin >> n; for(int i=1;i<=n;i++) { a[i] = i-1; } dfs(1,""); return 0; }制作
不易,义父们给个赞吧!
- 1
信息
- ID
- 424
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 280
- 已通过
- 91
- 上传者