问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
00001
00010
00011
<以下部分省略>
更新:看到之前写的程序,自己当年真是个大水比(虽然现在也是)。。。用递归写明显要更好一点啦
这道题的算法有很多,最NB的就是超级无敌打表法了,但是我没有那么睿(dan)智(teng),这里是用数组模拟二进制相加,逢二进一,每一次加1之后输出所得的二进制数
递归版本
递归版本
#include <iostream>
#include <stdio.h>
using namespace std;
int num[5];
void zo(int pos)
{
if(pos==5)
{
for(int i=0;i<5;i++)
{
printf("%d",num[i]);
}
printf("\n");
return;
}
for(int i=0;i<=1;i++)
{
num[pos]=i;
zo(pos+1);
}
}
int main()
{
zo(0);
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int num[5]= {0},i,j;
for(i=0; i<=31; i++)
{
for(j=4; j>=0; j--)
cout<<num[j];
cout<<endl;
num[0]++;
if(num[0]>1)
{
num[0]=0;
num[1]++;
if(num[1]>1)
{
num[1]=0;
num[2]++;
if(num[2]>1)
{
num[2]=0;
num[3]++;
if(num[3]>1)
{
num[3]=0;
num[4]++;
}
}
}
}
}
return 0;
}