原题:设每只母鸡的价值3元,每只公鸡价值2元,两只小鸡价值1元、现用100元钱买100只鸡,问能同时买到母鸡、公鸡、小鸡各多少只?
分析:
设母鸡、公鸡、小鸡各i、j、k只,限制条件都大于零,且K是偶数。下面通过枚举写出代码
#include <stdio.h>
int main()
{
int m=0,n=0,sum=0;
int i,j,k;
for(i=1;i<100;i++)
{
for(j=1;j<100;j++)
{
for(k=2;k<100;k=k+2)
{
m=i+j+k;
n=3*i+2*j+k/2;
if((m==100)&&(n==100))
{
printf("母鸡%d只, 公鸡%d只, 小鸡%d只\n",i,j,k);
}
sum++;
}
sum++;
}
sum++;
}
printf("共循环%d次\n",sum);
return 0;
}
循环太多,下面我们来优化一下算法:考虑每只鸡的最大量,同时又要兼顾每个品种都有
母鸡数量最多有32只,那第一层循环可改成1~32
公鸡最多有48只,而一只母鸡等于1.5个公鸡,所以第二层循环改成1~48-1.5i
第三层循环可以去掉,改成100-i-j
#include <stdio.h>
int main()
{
int m=0,n=0,sum=0;
int i,j,k;
for(i=1;i<32;i++)
{
for(j=1;j<(48-1.5*i);j++)
{
k=100-i-j;
n=3*i+2*j+k/2;
if((k%2==0)&&(n==100))
{
printf("母鸡%d只, 公鸡%d只, 小鸡%d只\n",i,j,k);
}
sum++;
}
sum++;
}
printf("共循环%d次\n",sum);
return 0;
}