百钱买百鸡的C语言问题

voidmain(){intcocks=0,hens,chicks;while(cocks<=19){hens=0;while(hen<=33){chicks=100-c... 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
展开
 我来答
zangbaise
推荐于2016-03-01 · TA获得超过515个赞
知道小有建树答主
回答量:714
采纳率:0%
帮助的人:500万
展开全部

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

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

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

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

创作者oIoO1H7ISR
2013-08-27 · TA获得超过3805个赞
知道小有建树答主
回答量:3070
采纳率:25%
帮助的人:211万
展开全部
百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计设鸡翁、鸡母、鸡雏的个数分别为cocks(x),hens(y),chicks(z),题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然cocks的值在0~20之间;
同理,hens的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
程序解释
main()
{
int
cocks=0,hens,chicks;
while
(cocks<=19)
//公鸡只数小于19
{hens=0;
while(hens<=33)
//母鸡小于33只
{chicks=100-cocks-hens;
if
(5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf("%d
%d
%d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*总是的进一步讨论这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勤谨还甜美丶小鲤鱼p
2009-02-07 · TA获得超过4680个赞
知道大有可为答主
回答量:5699
采纳率:0%
帮助的人:4250万
展开全部
基本正确.最主要一点值得商榷的地方就是,对问题的理解.应该是任何一种鸡的只数都不能为0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f7b9aa6bb
2009-02-08 · TA获得超过2250个赞
知道小有建树答主
回答量:584
采纳率:100%
帮助的人:464万
展开全部
但我总觉得百钱买百鸡问题可以先人为化简一下将y z都表示为x的表达式,而且可以通过不等式直接确定x的范围,以简化计算机的工作量

我发现我看了 zangbaise的回答才发现我昨天自己编的是对的,我在想为什么x都是4的倍数.也没深究...直接把工程删了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式