“蓝桥杯”基础练习:01字串

来源:互联网 发布:密码狗复制软件 编辑:程序博客网 时间:2024/05/18 02:19

问题描述

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

00000

00001

00010

00011

00100

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

输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
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;}


0 0