问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
方法一:字符串方式
#include <stdio.h>
int main()
{
int i = 0, j = 0;// 0 1 2 3 4
char Zerone[6] = {'0','0','0','0','0','\0'};//初始化
for (i = 0; i < 32; ++i) // 2^5=32
{
puts(Zerone);
Zerone[4] += 1; // 每次在末尾+1
for (j = 4; j >= 0; --j)
{
if ('2' == Zerone[j]) // 二进制进位
{
Zerone[j] = '0';
Zerone[j-1] += 1;
}
}
}
return 0;
}
或方法二:
# include <stdio.h>
int main(void)
{
int a[5]={0};
int temp;
int times;
int i;
printf("00000\n");
for(times=1;times<=31;times++)
{
i=0;
a[i]+=1;
while(a[i]>=2)
{
temp=a[i]/2;
a[i]=a[i]%2;
i++;
a[i]=a[i]+temp;
}
for(i=4;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
或方法三:利用5个循环
#include <iostream>
using namespace std;
int main()
{
//用5个循环来实现
int i,j,k,m,n;
for(i = 0;i <= 1; i ++)
{
for(j = 0; j <= 1;j ++)
{
for(k = 0;k <= 1;k ++)
{
for(m = 0; m <= 1;m ++)
{
for(n = 0;n <= 1;n ++)
{
cout<<i
<<j
<<k
<<m
<<n
<<endl;
}
}
}
}
}
return 0;
}
或方法四:二进制函数库<bitset> #我的思路#好方法值得推荐~#
#include <iostream>
#include<bitset>
using namespace std;
int main()
{
for(short n=0;n<32;n++)
cout<<bitset<5>(n)<<endl;
return 0;
}
或方法五:利用位操作
#include <iostream>
using namespace std;
int main()
{
for(int j=0;j<32;j++)
{
int k=j;
int a[5]={0,0,0,0,0};
for(int i=4; i>=0; i--)
{
a[i]=k&1;
k=k>>1;
}
for(int i=0;i<5;i++)
cout<<a[i];
cout<<endl;
}
system("pause");
return 0;
}