上课时遇到的一个问题
是一个百元百鸡的问题:一个老人欲用100元买100只鸡,其中公鸡卖2元,母鸡卖3元,小鸡卖0.5元,求所有的解。
是同学问我的,但是我也搞不懂为什么结果出不来。
#include
int main()
{
int x, y, z; //设公鸡为x,母鸡为y,小鸡为z
for (x = 1; x < 51; x++) //因为公鸡两元一只,不可能大于51
for (z = 2; z < 49; z = z + 2) //小鸡只能为偶数,所以就设初始量为2,并且每次加2
{
y = 100 - x - z; //用(100 - x - z)代替y
if (2 * x + 3 * y + 0.5 * z == 100) //判断是否满足条件:消耗一共一百元
printf("老大爷要买公鸡%d\n母鸡%d\n小鸡%d\n\n", x, y, z);
}
}
而如果把第二个for循环的变量“z”改成“y”,程序就能正常运行。
想了好久,着实是想不通为什么,麻烦各位指点一下!
小鸡的话,为啥要z<49呢?100元可以买200只小鸡啊。z<200试试吧
这个问题非常好理解,你假设全部购买你公鸡,那么最多50只
如果全部购买母鸡,那么最多33只,
如果全买小鸡,那么最多购买200只
由此就可以进行编码:
#include<stdio.h>
int main()
{
int i,j,k;
for(i=0;i<=50;i++) //i为公鸡的数量
for(j=0;j<=33;j++) //j为母鸡的数量
for(k=0;k<=200;k++) //k为小鸡的数量,由于价格是0.5元一只,所以可以用200元买400只
if((i+j+k==100) && (2*i+3*j+0.5*k==100)) //判断是否满足题目要求
printf("公鸡:%d 只,母鸡:%d 只,小鸡:%d 只\n",i,j,k);
return 0;
}