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

问题描述

对于长度为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;
}


原文地址:https://www.cnblogs.com/sr1993/p/3697798.html