本科生大二菜鸟一枚,最近上算法分析课老师出了道题,要求再输入一个小于20的正整数n的条件下穷举出n位二进制数。
做这道题的时候很容易想到的就是用10进制转成二进制数的常用方法,然后循环列举就行了。代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int a,n,i,j,k,A[20];
scanf("%d",&n);
if(n>20||n<1)printf("输入错误!");
for(i=0;i<pow(2,n);i++)
{
a=i;
for(j=1;j<=n;j++)
{
A[j-1]=a%2;
a=a/2;
}
for(k=n-1;k>=0;k--)
{
printf("%d",A[k]);
}
printf("\n");
}
return 0;
}
然后还有一种就是学了回溯算法之后的基本模板改过来了,如下:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
int n,c[20];
void search(int m)
{
int i;
if(m==n)
{
for (i=0;i<n;i++)
{
printf("%d",c[i]);
}
printf("\n");
}
else
{
c[m]=0;search(m+1);
c[m]=1;search(m+1);
}
}
int main()
{
int m=0;
scanf("%d",&n);
search(m);
return 0;
}
以上。
作为大二学生的自我分享平台。