用C++实现:01字串打印
程序员文章站
2022-09-01 17:42:54
问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。 输入格式 本试题没有输入。 输出格式 输出32行,按从小到大的顺序每行一个长度为5的01串。 样例输出 ......
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
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