百钱百鸡问题。“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?”

如题所述

题目分析与算法设计
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

*程序说明与注释
#include<stdio.h>
void main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n");
for(x=0;x<=20;x++) /*外层循环控制鸡翁数*/
for(y=0;y<=33;y++) /*内层循环控制鸡母数y在0~33变化*/
{
z=100-x-y; /*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/
if(z%3==0&&5*x+3*y+z/3==100)
/*验证取z值的合理性及得到一组解的合理性*/
printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
*运行结果
Follwing are possible plans to buy 100 fowls with 100 Yuan.
1:cock=0 hen=25 chicken=75
2:cock=4 hen=18 chicken=78
3:cock=8 hen=11 chicken=81
4:cock=12 hen=4 chicken=84
*总是的进一步讨论
这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-12
设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:5x+3y+z/3=100,x+y+z=100,这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:1) x的取值范围为1~202) y的取值范围为1~333) z的取值范围为3~99,对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。x=0,y=25,z=75   x =4;y =18;z =78 x =8;y =11;z =81 x =12;y =4;z =84本回答被网友采纳
第2个回答  2013-12-12
设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:5x+3y+z/3=100①,x+y+z=100,② ①*3-②,7x+4y=100解不定方程, x=(100-4y)/7=14-(2+4y)/7,2+4y被7除尽,2+4y=7t,y=(7t-2)/4=2t-(t+2)/4,t=2, 6, 10,(3y<100),代入得x =4;y =18;z =78x =8;y =11;z =81x =12;y =4;z =84,
相似回答