蓝桥——输出所有5位二进制
输出如00000、00001、00010这样的所有5位二进制数,一共32个
我想到了三个方法
1、暴力法
5个循环
#include <stdio.h>
int main() {
for(int a = 0; a <= 1; a++)
for(int b = 0; b <= 1; b++)
for(int c = 0; c <= 1; c++)
for(int d = 0; d <= 1; d++)
for(int e = 0; e <= 1; e++)
printf("%d%d%d%d%d\n", a, b, c, d, e);
return 0;
}
2、暴力基础上转换一下
5位二进制数对应的十进制范围为0~31,所以把这些数字转换为2进制输出即可
#include <stdio.h>
int box[6];
int get_binary(int num) {
int result = 0, k = 1, i, temp;
temp = num;
while(temp) {
i = temp % 2;
result += k * i;
k = k * 10;
temp = temp / 2;
}
return result;
}
int main() {
for(int i = 0; i <= 31; i++) {
printf("%05d\n", get_binary(i));
}
return 0;
}
3、深度优先搜索
类似于深搜计算全排列,把数字改为只能是0和1即可
#include <stdio.h>
int box[6];
void dfs(int step) {
if(step == 6) {
for(int i = 1; i <= 5; i++) {
printf("%d", box[i]);
}
printf("\n");
return;
}
for(int i = 0; i <= 1; i++) {
box[step] = i;
dfs(step + 1);
}
}
int main() {
dfs(1);
return 0;
}