用C++实现:01字串打印

2020-03-15 16:02:14来源:博客园 阅读 ()

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

用C++实现:01字串打印

问题描述

对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

00000

00001

00010

00011

00100

请按从小到大的顺序输出这32种01串。

输入格式 本试题没有输入。 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串。 样例输出 00000
00001
00010
00011
<以下部分省略> 思路:看到01,很自然想到二进制,故此题化十进制为二进制加法即可。
 1 #include<iostream>
 2 using namespace std;
 3 int main(void)
 4 {
 5     char* arr = new char[5];
 6     for (int i = 0; i < 5; i++)
 7     {
 8         arr[i] = '0';
 9     }
10     for (int i = 0; i < 32; i++)
11     {
12         cout << arr << endl;
13         arr[4] = arr[4] + 1;
14         for (int j = 4; j >= 0; j--)
15         {
16             if (arr[j] == '2')
17             {
18                 arr[j - 1] = arr[j - 1] + 1;
19                 arr[j] = '0';
20             }
21         }
22     }
23  delete[]arr;
24 return 0; 25 }

注意:第14行for里面判断语句j>=0,并不影响后面的arr[j-1]。因为i<32,也就是说,这个数在十进制下面最大是31,转化成二进制就是11111,故不管怎么加,arr[0]都不可能等于2,所以也就不会执行if语句。

 

 

再分享几个网上其他的做法:
  1 //一:暴力(这个可以有)
  2 
  3 #include <iostream>
  4 using namespace std;
  5 int main()
  6 {
  7     cout << "00000" << endl;
  8     cout << "00001" << endl;
  9     cout << "00010" << endl;
 10     cout << "00011" << endl;
 11     cout << "00100" << endl;
 12     cout << "00101" << endl;
 13     cout << "00110" << endl;
 14     cout << "00111" << endl;
 15     cout << "01000" << endl;
 16     cout << "01001" << endl;
 17     cout << "01010" << endl;
 18     cout << "01011" << endl;
 19     cout << "01100" << endl;
 20     cout << "01101" << endl;
 21     cout << "01110" << endl;
 22     cout << "01111" << endl;
 23     cout << "10000" << endl;
 24     cout << "10001" << endl;
 25     cout << "10010" << endl;
 26     cout << "10011" << endl;
 27     cout << "10100" << endl;
 28     cout << "10101" << endl;
 29     cout << "10110" << endl;
 30     cout << "10111" << endl;
 31     cout << "11000" << endl;
 32     cout << "11001" << endl;
 33     cout << "11010" << endl;
 34     cout << "11011" << endl;
 35     cout << "11100" << endl;
 36     cout << "11101" << endl;
 37     cout << "11110" << endl;
 38     cout << "11111" << endl;
 39     return 0;
 40 }
 41 
 42 // 方法二:五层循环法
 43 
 44 #include <iostream>
 45 using namespace std;
 46 int main()
 47 {
 48     int a, b, c, d, e;
 49     for (a = 0; a < 2; ++a)
 50         for (b = 0; b < 2; ++b)
 51             for (c = 0; c < 2; ++c)
 52                 for (d = 0; d < 2; ++d)
 53                     for (e = 0; e < 2; ++e)
 54                         cout << a << b << c << d << e << endl;
 55     return 0;
 56 }
 57 
 58 // 方法三:模拟二进制运算
 59 
 60 #include <iostream>
 61 #include <string>
 62 using namespace std;
 63 int main()
 64 {
 65     int i, j;
 66     string str = "00000";
 67     for (i = 0; i < 32; ++i)
 68     {
 69         cout << str << endl;
 70         str[4] += 1;
 71         for (j = 4; j >= 0; --j)
 72         {
 73             if (str[j] == '2')
 74             {
 75                 str[j - 1] += 1;
 76                 str[j] = '0';
 77             }
 78         }
 79     }
 80     return 0;
 81 }
 82 
 83 
 84 
 85 
 86 
 87 // 方法四:十进制转换二进制法
 88 
 89 
 90 
 91 #include <iostream>
 92 using namespace std;
 93 int main()
 94 {
 95     for (int i = 0; i < 32; i++) {
 96         cout << i % 32 / 16 << i % 16 / 8 << i % 8 / 4 << i % 4 / 2 << i % 2 << endl;
 97     }
 98     return 0;
 99 }
100 
101 //五:
102 #include <iostream>
103 using namespace std;
104 int main() {
105     for (int i = 0; i <= 31; i++)
106     {
107         int a[5] = { 0 };
108         int num = i;
109         int z = 0;
110         while (num != 0)
111         {
112             a[z] = num % 2;
113             z++;
114             num /= 2;
115         }
116         for (int j = 4; j >= 0; j--)
117             cout << a[j];
118         cout << endl;
119     }
120     return 0;
121 }

原文链接:https://blog.csdn.net/u012110719/article/details/41870877


原文链接:https://www.cnblogs.com/guanrongda-KagaSakura/p/12496385.html
如有疑问请与原作者联系

标签:PSHTTPSiOSC++&lt

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C++运算符重载

下一篇:C++中自定义结构体或类作为关联容器的键