问题描述:
对于长度为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;
}
}