2016.10.14
【题目描述】
穷举n位二进制数
时限:100ms 内存限制:10000K 总时限:300ms
描述:
输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入:
输入一个小于20的正整数n。
输出:
按从小到大的顺序输出所有的n位二进制数,每个数占一行。
输入样例:
3
输出样例:
000
001
010
011
100
101
110
111
【解题思路】
利用回溯算法,对于每一位枚举0/1两种情况
【代码实现】
# include <stdio.h>
int a[25];
void f(int ,int );
void print(int );
int main(void)
{
int n;
scanf("%d", &n);
f(1,n);
return 0;
}
void f(int m,int n)
{
if (m == n + 1)
print(n);
else
{
a[m] = 0;
f(m + 1, n);
a[m] = 1;
f(m + 1, n);
}
}
void print(int n)
{
int i;
for (i = 1; i <= n; ++i)
printf("%d", a[i]);
printf("\n");
}
【心得体会】
回溯算法要恢复状态