穷举算法

来源:互联网 发布:mac解压rar免费 编辑:程序博客网 时间:2024/05/16 08:43

                            穷举法

eg1:把一元钞票换成一分、二分、五份硬币(每种至少一枚),有哪些种换法?

#include<stdio.h>

int main()

{

int m,i,j,k,count=0;

m=100-1-2-5;

for(i=0;i<=m/5;i++)

for(j=0;j<=(m-i*5)/2;j++)

{

k=m-i*5-j*2;

count++;

printf("%d %d %d\n",k+1,j+1,i+1);

}

printf("%d\n",count);

return 0;

}

eg2:将1,2...9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数.

#include<stdio.h>

int main()

{

int num[3],a[9],i,j,count;

for(a[0]=1;a[0]<=3;a[0]++)

for(a[1]=1;a[1]<=9;a[1]++)

for(a[2]=1;a[2]<=9;a[2]++)

{

count=1;

num[0]=a[0]*100+a[1]*10+a[2];

num[1]=2*num[0];

num[2]=3*num[0];

a[3]=num[1]/100;  a[4]=num[1]/10%10;  a[5]=num[1]%10;

a[6]=num[2]/100;  a[7]=num[2]/10%10;  a[8]=num[2]%10;

for(i=0;i<9;i++)

for(j=i+1;j<9;j++)

{

if(a[i]==0||a[i]>9)

count=0;

if(a[i]==a[j])

count=0;

}

    if(count!=0)

printf("%d %d %d\n",num[0],num[1],num[2]);

}

return 0;

}

eg3:陈婷有一个E-MAIL邮箱的密码是一个5位数。但因为有一段比较长的日子没有打开这个邮箱了,陈婷把这个密码给忘了。不过陈婷自己是8月1日出生,而她妈妈的生日则是9月1日,她特别喜欢把同时是8l和9l的倍数用作密码。陈婷还记得这个密码的中间一位(百位数)是l。你能设计一个程序帮她找回这个密码吗?

#include<stdio.h>

int main()

{

int i;

for(i=2;(i*81*91)/100000==0;i++)

{

if((i*81*91)/100%10==1)

printf("%d\n",i*81*91);

}

return 0;

}

原创粉丝点击