计算n位二进制的所有情况
原创
©著作权归作者所有:来自51CTO博客作者mb5dbc2345bf8de的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
1、二进制
平常做题的时候偶尔用到二进制的所有情况的题目,软件测试,离散数学里面都有,那么怎么让程序打印出来给定n位的二进制所有情况呢,使用递归算法就好了。
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e2;
int n=3;
bool vis[MAXN];
void dfs(int index){
if(index == n+1){
for(int i = 1; i <= n; i++){
cout << vis[i] << " ";
}
cout << endl;
return ;
}
vis[index]=true;
dfs(index+1);
vis[index]=false;
dfs(index+1);
}
int main(){
dfs(1);
return 0;
}
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 1
0 0 0
2、全排列
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e2;
int n=3;
bool vis[MAXN];
int P[MAXN];
void dfs(int index){
if(index == n+1){
for(int i = 1; i <= n; i++){
cout << P[i] << " " ;
}
cout << endl;
return;
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
P[index] = i;
vis[i]=true;
dfs(index+1);
vis[i]=false;
}
}
}
int main(){
dfs(1);
return 0;
}
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1