“蓝桥杯”基础练习:01字串
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
00001
00010
00011
<以下部分省略>
因为要从00000输出到11111,一共32行5列,一开始想着就开一个这么大的二维数组吧,挨个的更新每行元素就行呗,结果没我想的这么简单,因为下一行总是和前一行息息相关,而且在下一行没处理之前,它必须和上一行的数相同,要经常更新行元素。 比如一开始赋值全部为00000,当加一以后第二行变为00001,可是这时候第三行元素还仍然是00000呢,要在00001的基础上加1,它必须和上一行(第二行)元素相等才可以。后来一想,不用这么麻烦,既然需要更新,那就用一个s[5] 的简单数组来自己更新不就得了,加上31次,就这样。
代码:
#include <iostream> #include <string.h> using namespace std; int two[6]; int main() { memset(two,0,sizeof(two)); cout<<"00000"<<endl; for(int i=1;i<=31;i++) { two[5]++; if(two[5]==2) { two[4]++; two[5]=0; } if(two[4]==2) { two[3]++; two[4]=0; } if(two[3]==2) { two[2]++; two[3]=0; } if(two[2]==2) { two[1]++; two[2]=0; } for(int m=1;m<=5;m++) cout<<two[m]; cout<<endl; } return 0; }