01字串

问题描述:
对于长度为5位的01串,每一位都可能是9或1,一共有32种可能。它们前几个是:
00000
00001
00010
00100
请按从小到大的顺序写出这几种01串。

输出格式:
输出32行,按从小到大的顺序每一行一个长度为5的01串
解题思路
  • 0~32转成二进制输出即得该题所求

  • 输出32行,最后一行应该输出31的5位二进制: 1 1111 ,对应2^4 = 16 , 2^3 = 8 , 2^2 = 4 , 2^1 = 2 , 2^0 = 1

  • 31 % 32 /16= 1; 31 % 16 / 8= 1; 31 % 8 / 4 = 1; 31 % 4 / 2 = 1; 31% 2 = 1

    方法一
    代码实现

    暴力输出

    #include<iostream>
    using namespace std;
    
    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;
    }
    

    方法二:

    31 % 2 = 1 , 31 / 2 = 15
    15 % 2 = 1 , 15 / 2 = 7
    7  % 2 = 1 , 7  / 2 = 3
    3  % 2 = 1 , 1  / 2 = 0
    
#include<iostream>
using namespace std;

int main()
{
	for(int i = 0;i < 32;i++)
	{
		int a[5]={0}; //i = 0 时;输出 0 0000
		int n = i;
		int num = 4;

		while(n >= 1) 
		{
			a[num--] = n % 2;
			n /= 2;
		}
		for(int j = 0;j < 5;j++)
		{
			cout<<a[j]; //遍历输出
		}
		cout<<endl;
	}
}

posted @ 2021-07-15 19:37  小芦荟同学  阅读(121)  评论(0编辑  收藏  举报