输出01字符串问题

注:

以下代码均为在VS Code调试,故添加了System("pause");,考试时这一句不必添加。

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
对于长度为5位的一个01串,每一位都可能是01,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100

请按从小到大的顺序输出这3201串。

输入格式
本试题没有输入。

输出格式
输出32行,按从小到大的顺序每行一个长度为501串。
样例输出
00000
00001
00010
00011

思路:

其实这道题目很简单,就是十进制转换为二进制的问题,若想得很复杂反而不容易做出来。我的思路就是首先声明一个长度为5的数组并初始化为0,然后遍历0-32,分别将其转换为二进制数,并存放到之前声明的数组中,然后逆向输出即可。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>

using namespace std;

int main()
{
for (int i = 0; i < 32; i++)
{
int t = i, j = 5;
int v[] = {0, 0, 0, 0, 0};
for (int j = 0; t > 0; j++)
{
v[j] = t % 2;
t = t / 2;
}
for (int k = 4; k >= 0; k--)
{
cout << v[k];
}
cout << endl;
}

system("pause");
return 0;
}

另外附上在网上看到的很牛的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>

using namespace std;

int main()
{
int i;
for (i = 0; i < 32; i++)
cout << i / 16 % 2 << i / 8 % 2 << i / 4 % 2 << i / 2 % 2 << i % 2 << endl;

system("pause");
return 0;
}

当然还有最暴力的解法,不就才32行的数据,直接32个cout就完了。(手动狗头)这个就不多说了。


输出01字符串问题
https://excelius.xyz/输出01字符串问题/
作者
Ther
发布于
2021年3月21日
许可协议