时限:100ms 内存限制:10000K 总时限:300ms
描述
输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入
输入一个小于20的正整数n。
输出
按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入样例
3
输出样例
000
001
010
011
100
101
110
111
#include <stdio.h>
int n; //问题的规模n小于等于20
int a[20]; //定义一个足够大的数组a来存放生成的n位的二进制数
// n位二进制数中的第i位,存放到a[i]中
void search(int m); //穷举n位二进制数的递归函数
void printfresult(); //输出当前数组a表示的n位二进制数
int main()
{
scanf("%d", &n); //读入正整数n
search(0); //穷举n位二进制数
return 0;
}
void search(int m) //在a[0]到a[m-1]这m项已经确定了的情况下,
{//穷举n-m位的二进制数,并且存放到a[m]到a[n-1]中
if(m == n) //递归结束的条件
printfresult(); //输出当前生成的这个n位二进制数
else
{
a[m]=0; //最高位置为0
search(m+1); //穷举n-m-1位的二进制数,并且存放到a[m+1]到a[n-1]中
a[m]=1; //最高位置为1
search(m+1); //穷举n-m-1位的二进制数,并且存放到a[m+1]到a[n-1]中
}
}
void printfresult() //输出当前生成的这个n位二进制数
{
int i;
for(i = 0; i < n; i++)
{
printf("%d", a[i]);
}
printf("\n");
}