C程序设计:百钱百鸡问题C程序设计:百钱百鸡问题
百钱百鸡问题
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何,
*题目分析与算法设计
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程...
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",++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
*总是的进一步讨论
这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑。
百钱买百鸡中国古代数学家著有一本古典数学问题的《算经》,其中记载的问题在当时都是一些有趣的难题。其中最著名的“百钱百鸡”问题叙述如下: “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何,” 这个问题翻译成白话文就是:“一只公鸡值五文钱;一只母鸡值三文钱;三只小鸡值一文钱;请问用一百文钱买一百只鸡,公鸡、母鸡和小鸡各有多少只,”
我们假设公鸡、母鸡和小鸡的个数分别为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++) /*母鸡的数目作为内层循环的循环变量*/
x-y; /*用总鸡数方程计算小鸡的数目*/ { z=100-
if(z%3==0&&5*x+3*y+z/3==100) /*如果满足总钱数,找到合理的解*/ printf("2d:cock=%-2d hen=%-2d chicken=%-2d\n",++j,x,y,z);
}
}
运行结果:
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
本文档为【C程序设计:百钱百鸡问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。