百钱买百鸡的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 07:59:17
void main()
{int cocks=0,hens,chicks;
while(cocks<=19)
{hens=0;
while(hen<=33)
{chicks=100-cocks-hens;
if(5*cocks+3*hens+chicks/3==100)
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
结果是:0 25 75
3 20 77
4 18 78
7 13 80
8 11 81
11 6 83
12 4 84

这个是某大学C语言教授写的。大家觉的方法,结果都对嘛?
看不清楚 我也认为他做的不对。鸡雏的数量一定要是被3整除的。
下面是我自己编的。是按钱来算的。救出钱数再求只数!
你看一下。zangbaise
#include "stdio.h"
void main()
{
int dj,mj,xj;
dj=0;
while (dj<=100)
{
mj=0;
while(mj<=100)
{
xj=100-dj-mj;
if(dj/5+mj/3+xj*3==100)
printf("dj=%d,mj=%d,xj=%d\n",dj/5,mj/3,xj*3);
mj=mj+3;

}
dj=dj+5;
}
}
结果是:0 25 75
4 18 78
8 11 81
12 4 84

不对,因为chicks/3这个数是个整数,他取整数部分,也就是说在clicks不是3的整倍数时,结果是错的。或者把clicks定义成double也许会可以试试。 

看一下图吧,正确结果,能看清吗?

意思是一样的,就是两个等式,钱数和个数相等,用哪个都可以。

因为你要求的循环变量的增幅是定下来的,所以这样可以,或者 还可以增加判断条件,来满足要求。 结论是没有问题的,多种方法,多个思路。

但我总觉得百钱买百鸡问题可以先人为化简一下将y z都表示为x的表达式,而且可以通过不等式直接确定x的范围,以简化计算机的工作量

我发现我看了 zangbaise的回答才发现我昨天自己编的是对的,我在想为什么x都是4的倍数.也没深究...直接把工程删了.

基本正确.最主要一点值得商榷的地方就是,对问题的理解.应该是任何一种鸡的只数都不能为0.