您好,欢迎来到尔游网。
搜索
您的当前位置:首页C程序设计:百钱百鸡问题

C程序设计:百钱百鸡问题

来源:尔游网


百钱百鸡问题

中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

*题目分析与算法设计

设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:

5x+3y+z/3=100

x+y+z=100

所以此问题可归结为求这个不定方程的整数解。

由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

*程序说明与注释

#include

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\

}

}

*运行结果

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

*总是的进一步讨论

这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑。

百钱买百鸡中国古代数学家著有一本古典数学问题的《算经》,其中记载的问题在当时都是一些有趣的难题。其中最著名的“百钱百鸡”问题叙述如下: “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?” 这个问题翻译成白话文就是:“一只公鸡值五文钱;一只母鸡值三文钱;三只小鸡值一文钱;请问用一百文钱买一百只鸡,公鸡、母鸡和小鸡各有多少只?”

我们假设公鸡、母鸡和小鸡的个数分别为x,y,z,那么买公鸡的钱数为5x,买母鸡的钱数为3y,买小鸡的钱数为z/3;再由题意,x,y和z的和为100,因此我们可以得到该问题

的数学模型如下:5x+3y+z/3=100x+y+z=100因为鸡的个数只能是整数,所以问题可以归结为求这个不定方程的整数解。不定方程的求解途径一般是打出各变量的数值汇聚围,再用穷举法找到所有可能的解,在本题中,如果100文钱全部买公鸡,最多买20只,因此x的取值在0~20之间;同理y的取值在0~33之间。得到了变量x和y的取值汇聚围后,昝用C语言的二重for循环,让x和y 分别作为外层和内层循环的循环变量,我们可以让计算机穷举所有可能的情况,从而找到正确的解。

代码如下:

#include

main()

{ int x,y,z,j=0;

printf(\"Possible solutions to buy 100 fowls whith 100 yuan\\n\"); for(x=0;x<=20;x++) /*公鸡的数目作为外层循环的循环变量*/ for(y=0;y<=33;y++) /*母鸡的数目作为内层循环的循环变量*/

{ z=100-x-y; /*用总鸡数方程计算小鸡的数目*/ if(z%3==0&&5*x+3*y+z/3==100) /*如果满足总钱数,找到合理的解*/ printf(\"2d:cock=%-2d hen=%-2d chicken=%-2d\\n\

}

}

运行结果:

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务