穷举法
1.密码箱问题
#include<stdio.h>
main()
{
int i,key;
printf("请设定旅行箱的密码(000-999):"); scanf("%d",&key);
printf("\n你的旅行箱密码是:");
for(i=0;i<=999;i++)
if(i==key)
if(i<10)printf("%d\n",i);
else if(i<100)printf("%d\n",i);
else printf("%d\n",i);
}
c语言大学教程2.百钱买百鸡问题
#include<stdio.h>
main()
{
int  i , j , k;
/*准备输出格式*/
printf("\t公鸡\t母鸡\t小鸡\n");
for(i=0;i<=20;i++)
for(j=0;j<=33;j++)
{
k=100-i-j;
if(k%3==0 && i*5+j*3+k/3==100)  printf("\t%d\t%d\t%d\n",i ,j ,k);  }
}
例  2 :36 块砖,36 人搬。男搬  4 ,女搬  3 ,
两个小儿抬一砖。要求一次全搬完。问需男、女、小儿各若干(必须都有)?
请同学们先分析第一步:问题所涉及的情况;
analysis:都男的搬,需9人;都女的搬,需12人,都小孩搬,需72人;
小孩书需要是2的整数倍;
解:
#include<stdio.h>
main()
{
int i,j,k;
for(i=0;i<=9;i++)
for(j=0;j<=12;j++)
{
k=36-i-j;//消去参数需放在最后一个for循环里面
if(k%2==0&&i*4+j*3+k*0.5==36)
printf("%d\t%d\t%d\n",i,j,k);
}
作业:
换零钞问题:一张100元,换成20,10,5,1面值的零钞,每种至少一张,共有哪些换法,总计多少种换法?
都换20:5张;----i
都换10:10张;----j
都换5:20张;----k
都换1:100张----t
t=100-i-j-k;
解:
#include<stdio.h>
main()
int i,j,k,t;
for(i=1;i<=5;i++)
for(j=1;j<=10;j++)
for(k=1;k<=20;k++)
{
t=100-i*20-j*10-k*5;
if(i*20+j*10+k*5+t==100&&t>0)
printf("%d\t%d\t%d\t%d\n",i,j,k,t);
}
}
2.从1到100的自然数中,
每次取出两个数,要使它们
的和大于100,共有哪些取法,总计多少种取法?
#include<stdio.h>