蓝桥-01字串的四组解法

Description

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

00000

00001

00010

00011

00100

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

Input

本试题没有输入。

Output

输出32行,按从小到大的顺序每行一个长度为5的01串。

Sample Output

00000
00001
00010
00011

①、暴力

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <iomanip>
typedef long long LL;
using namespace std;
#define memset(a,n) memset(a,n,sizeof(a))
#define INF 0x3f3f3f3f
#define mod 10007
#define PI acos(-1)

int main()
{
    cout<<"00000"<<endl;
    cout<<"00001"<<endl;
    cout<<"00010"<<endl;
    cout<<"00011"<<endl;
    cout<<"00100"<<endl;
    cout<<"00101"<<endl;
    cout<<"00110"<<endl;
    cout<<"00111"<<endl;
    cout<<"01000"<<endl;
    cout<<"01001"<<endl;
    cout<<"01010"<<endl;
    cout<<"01011"<<endl;
    cout<<"01100"<<endl;
    cout<<"01101"<<endl;
    cout<<"01110"<<endl;
    cout<<"01111"<<endl;
    cout<<"10000"<<endl;
    cout<<"10001"<<endl;
    cout<<"10010"<<endl;
    cout<<"10011"<<endl;
    cout<<"10100"<<endl;
    cout<<"10101"<<endl;
    cout<<"10110"<<endl;
    cout<<"10111"<<endl;
    cout<<"11000"<<endl;
    cout<<"11001"<<endl;
    cout<<"11010"<<endl;
    cout<<"11011"<<endl;
    cout<<"11100"<<endl;
    cout<<"11101"<<endl;
    cout<<"11110"<<endl;
    cout<<"11111"<<endl;
    return 0;

}

②、十进制转化成二进制

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
typedef long long LL;
using namespace std;
#define memset(a,n) memset(a,n,sizeof(a))
#define INF 0x3f3f3f3f
#define mod 10007


void Judge(int x)
{
    int a[10];
    int cnt=0;
    while(x)
    {
        a[cnt++]=x%2;
        x/=2;
    }

    for(int i=cnt;i<5;i++)
        a[i]=0;
    for(int i=4;i>=0;i--)
        cout<<a[i];
}
int main()
{
    for(int i=0;i<32;i++){
        Judge(i);
        cout<<endl;
    }

}

  十进制转化成二进制

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
typedef long long LL;
using namespace std;
#define memset(a,n) memset(a,n,sizeof(a))
#define INF 0x3f3f3f3f
#define mod 10007

int main()
{
    for(int i=0;i<32;i++){
        cout<<i%32/16<<i%16/8<<i%8/4<<i%4/2<<i%2<<endl;
    }
    return 0;

}

③、五层循环输出

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
typedef long long LL;
using namespace std;
#define memset(a,n) memset(a,n,sizeof(a))
#define INF 0x3f3f3f3f
#define mod 10007

int main()
{
    int a,b,c,d,e;
    for(a=0; a<2; ++a)
        for(b=0; b<2; ++b)
            for(c=0; c<2; ++c)
                for(d=0; d<2; ++d)
                    for(e=0; e<2; ++e)
                        cout<<a<<b<<c<<d<<e<<endl;
    return 0;

}

④、C++库中的 bitset 类型

传送门

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
typedef long long LL;
using namespace std;
#define memset(a,n) memset(a,n,sizeof(a))
#define INF 0x3f3f3f3f
#define mod 10007

int main()
{
    for(int i=0;i<32;i++)
        cout<<bitset<5>(i)<<endl;
}


// bitset<n>(a)  : 输出a的n位二进制数

另外补充:

    int n=100;
    cout<<bitset<5>(n)<<endl;  // 输出二进制,用 bitset 控制输出的位数
    cout<<dec<<n<<endl;     // 输出十进制
    cout<<oct<<n<<endl;     // 输出八进制
    cout<<hex<<n<<endl;     // 输出十六进制




ANS:

00100
100
144
64

猜你喜欢

转载自blog.csdn.net/JKdd123456/article/details/88206794