百钱买百鸡问题

合集下载

古代数学中的百元买百鸡问题

古代数学中的百元买百鸡问题

百鸡问题是一个数学问题,出自中国古代约5—6世纪成书的《张丘建算经》,是原书卷下第38题,也是全书的最后一题,该问题导致三元不定方程组,其重要之处在于开创“一问多答”的先例。

问题原文:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。

凡百钱买鸡百只,问鸡翁、母、鶵各几何?答曰:鸡翁四,值钱二十;鸡母十八,值钱五十四;鸡鶵七十八,值钱二十六。

又答:鸡翁八,值钱四十;鸡母十一,值钱三十三,鸡鶵八十一,值钱二十七。

又答:鸡翁十二,值钱六十;鸡母四、值钱十二;鸡鶵八十四,值钱二十八。

”原书没有给出解法,只说如果少买7只母鸡,就可多买4只公鸡和3只小鸡。

所以只要得出一组答案,就可以推出其余两组答案。

中国古算书的著名校勘者甄鸾和李淳风注释该书时都没给出解法,只有约6世纪的算学家谢察微记述过一种不甚正确的解法。

到了清代,研究百鸡术的人渐多,1815年骆腾风使用大衍求一术解决了百鸡问题。

1874年丁取忠创用一个简易的算术解法。

在此前后时曰醇(约1870)推广了百鸡问作《百鸡术衍》,从此百鸡问题和百鸡术才广为人知。

百鸡问题还有多种表达形式,如百僧吃百馒,百钱买百禽等。

宋代杨辉算书内有类似问题,中古时近东各国也有相仿问题流传。

例如印度算书和阿拉伯学者艾布·卡米勒的著作内都有百钱买百禽的问题,且与《张邱建算经》的题目几乎全同。

解法数学解法从现代数学观点来看,实际上是一个求不定方程整数解的问题。

解法如下:设公鸡、母鸡、小鸡分别为x、y、z 只,由题意得:①……x+y+z =100②……5x+3y+(1/3)z =100有两个方程,三个未知量,称为不定方程组,有多种解。

令②×3-①得:7x+4y=100;所以y=(100-7x)/4=25-2x+x/4令x/4=t, (t为整数)所以x=4t把x=4t代入7x+4y=100得到:y=25-7t易得z=75+3t所以:x=4ty=25-7tz=75+3t因为x,y,z为正整数所以4t大于025-7t大于075+3t大于0解得t大于0小于等于25/7 又因为t为整数所以t=1时x =4;y =18;z =78当t=2时x =8;y =11;z =81当t=3时x =12;y =4;z =84。

PYTHON中百钱买百鸡问题

PYTHON中百钱买百鸡问题

PYTHON中百钱买百鸡问题PYTHON中百钱买百鸡问题问题:中国古代数学家张丘建在他的《算经》中提出了⼀个著名的“百钱买百鸡问题”:鸡翁⼀,值钱五;鸡母⼀,值钱三;鸡雏三,值钱⼀;百钱买百鸡,问翁、母、雏各⼏何?在PYTHON中编程实现将所有可能的⽅案输出。

问题分析:根据题意设公鸡、母鸡和雏鸡分别为cock,hen和biddy,如果100钱全买公鸡,那么最多能买20只,所以cock的范围是⼤⼩等于0⼩于等于20;如果全买母鸡那么最多能买33只,所以hen的范围是⼤于等于0⼩于等于33;如果100钱全买⼩鸡,那么根据题意最多能买99只(⼩鸡的数量应⼩于100且是3的倍数)。

在确定了各种鸡的范围后进⾏穷举并判断,判断的条件有以下3种:(1)、所买的三种鸡的钱数总和为100;(2)、所买的三种鸡的数量之和为100;(3)、所买的⼩鸡的数量必须是3的倍数。

程序代码:for cock in range(0,20+1): #鸡翁范围在0到20之间for hen in range(0,33+1): #鸡母范围在0到33之间for biddy in range(3,99+1): #鸡雏范围在3到99之间if (5*cock+3*hen+biddy/3)==100:#判断钱数是否等于100if (cock+hen+biddy)==100: #判断购买的鸡数是否等于100if biddy%3==0: #判断鸡雏数是否能被3整除print ("鸡翁:",cock,"鸡母:",hen,"鸡雏:",biddy) #输出程序运⾏结果:鸡翁: 0 鸡母: 25 鸡雏: 75鸡翁: 4 鸡母: 18 鸡雏: 78鸡翁: 8 鸡母: 11 鸡雏: 81鸡翁: 12 鸡母: 4 鸡雏: 84。

中国古代经典数学题

中国古代经典数学题

中国古代经典数学题
中国古代经典数学题有很多,以下是其中的一些例子:
1. 《孙子算经》中的“百钱买百鸡”问题:一个农夫用100文钱去买100只鸡,其中公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱三只,问该农夫如何购买才能恰好买到100只鸡并且花光所有的钱?
2. 《周髀算经》中的“鸡兔同笼”问题:有若干只鸡和兔子在一个笼子里,数目不知道,但是头数是已知的,若数总共有35个头,脚的总数有94只,求兔子和鸡各有多少只?
3. 《算经十书》中的“海岛问题”:有36个人,他们要穿过一座桥,桥上只能同时容纳两个人,且必须有灯才能够通过。

这36个人中有12个人可以在1分钟内穿过桥,24个人需要2分钟,在桥的这一端还有一盏30秒钟的灯,问这36个人最短需要多长时间才能全部通过桥?
这些问题都具有一定的难度,但又非常有趣,是中国古代数学智慧的体现。

百钱百鸡问题 c++语言 信息学奥赛二级

百钱百鸡问题 c++语言 信息学奥赛二级

百钱百鸡问题 c++语言信息学奥赛二级下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

百钱百鸡问题 c++语言信息学奥赛二级该文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document 百钱百鸡问题 c++语言信息学奥赛二级 can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary,word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!"百钱百鸡"问题是一个古老的数学问题,它涉及到如何用一定数量的钱买一定数量的鸡,给定条件下求解鸡的数量及其价格。

小升初奥数百鸡问题解题指导及例题解析

小升初奥数百鸡问题解题指导及例题解析

小升初奥数百鸡问题解题指导及例题解析《张丘建算经》中有这样一题:公鸡每只值5文钱,母鸡每只值3文钱,小鸡每3只值1文钱。

现在用100文钱买100只鸡,公鸡、母鸡、小鸡各有多少只?这是中国古代算术中的一类典型问题――百鸡问题,现代数学用不定方程求解,在小学阶段,不少同学都是用拼凑的办法来解决。

这里介绍一种新方法,对小学生很适用。

1、求倍数。

每只公鸡值5文钱,每只母鸡值3文钱,每只小鸡值1/3文钱。

以最便宜的小鸡为标准,公鸡和母鸡的价格分别是小鸡的5- 1/3=15倍和3- 1/3=9倍。

2、算超额。

假设100文钱全部买小鸡,可买100 +1/3=300只,超出实有三种鸡总数300-100=200只。

3、组等式。

由于公鸡置换成小鸡可多出自身只数的15-1=14倍,母鸡置换成小鸡可多出自身只数的9-仁8倍。

不难理解,上述假设中多出的200只即为公鸡和母鸡置换成小鸡后一共增加的只数,关系式为:公鸡只数X 14+母鸡只数X 8=200.4、试结果。

一般来说,不定方程的正整数解按关系式就可以观察得到。

我们也可以先把等式变形,观察起来更为容易。

方法是,在等式两边同时除以一个相同的数(0除外),得到等式右边为整数,左边只有一项系数是分数的形式。

在上式两边同时除以8,得到:公鸡只数X 7/4+母鸡只数=25.显然,公鸡只数必须是4的倍数。

这样,从“ 4”起,依次用4的倍数去试算,可以得出三种情况:公鸡4只,母鸡18只,小鸡78只;或公鸡8只,母鸡11只,小鸡81只; 或公鸡12只,母鸡4只,小鸡84只。

下面再举一例来验证。

大数学家欧拉曾提出过这样的问题:一头猪321(312)银币,一只山羊131(113)银币,一只绵羊21(1/2)银币。

有人用100个银币,买了100头牲畜。

问:猪、山羊、绵羊各多少?猪的单价是绵羊的312- 1/2=7倍,山羊的单价是绵羊的113+ 1/2=223倍,猪和山羊分别置换成绵羊,可多出自身只数的7-1=6倍和223-仁123倍。

百钱百鸡问题

百钱百鸡问题

百鸡问题
公元5世纪末,我国古代数学家张丘建在他所撰写的《算经》中,提出了这样的一个问题:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”意思是公鸡5元一只,母鸡3元一只,小鸡1元三只。

用100元100只鸡,求公鸡、母鸡、小鸡各买几只。

假设a 为公鸡只数,b 为母鸡只数,c 为小鸡只数,如果把问题转化为n 元钱买n 只鸡,针对上述问题n =100,根据题意可得出下面的约束方程:
53/3%30
a b c n
a b c n c ++=++==
用穷举法实现如下所示:
图4.3 穷举法求解百鸡问题
这个算法有三重循环,枚举公鸡数量的外循环,枚举母鸡数量的中间循环以及枚举小鸡数量的内循环,主要执行时间取决于内循环的循环体的执行次数,需要执行(n+1)3次,当n=100时,内循环需要执行大于100万次。

考虑到n元钱只能买到n/5只公鸡或n/3只母鸡,因此有些组合可以不必考虑,而小鸡的数目又取决于公鸡和母鸡的只数,上述的内循环可以省去。

图4.3 改进算法求解百鸡问题
改进算法只有两层循环,枚举公鸡数量的外循环和枚举母鸡数量的内循环,内循环的执行次数为(n/5+1) (n/3+1)。

当n=100时,内循环执行21*34=714次,这和穷举算法的100万次相比,仅为原来的万分之七,有重大改进。

百钱买百鸡实验报告

百钱买百鸡实验报告

一、题目描述我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?二、解题思路对n=100的情况,因为有三个变量,则有三重循环和二重循环两种算法1、算法一:三重循环(1)变量变化范围的确定:由于公鸡5钱一只,则100钱最多可购买100/5=20只公鸡,此即为第一个变量的变化上限;由于母鸡3钱一只,则100钱最多可购买100/3≈33只母鸡,此即为第二个变量的变化上限;由于小鸡三只一钱,而所有鸡的总数不得超过100只,则100即为第三个变量的变化上限;(2)条件的控制:由百钱买百鸡可知,鸡的数量为100只,买鸡所用的钱数为100钱,即控制条件为a+b+c=100且a*5+b*3+c/3=100;2、二重循环:(1)变量变化范围的确定:由于整题共有3个变量,所以当前两个变量确定后,第三个变量自然被确定下来,故可采用二重循环解题。

前两个变量的确定同三重循环,第三个变量则用c=n-a-b来确定;(2)条件的控制:由百钱买百鸡可知,鸡的数量为100只,买鸡所用的钱数为100钱,即控制条件为a+b+c=100且a*5+b*3+c/3=100;由于需要讨论算法的时间性能,在程序中加入时间函数计算程序运行所需的时间进行比较。

用控制变量的方法,对两种算法中的n进行同样的变化处理,来讨论两种算法的时间性能,e.g.分别令n=100,n=200,n=500,n=1000,n=2000,n=5000三、自我评估、反思由于较长时间未使用C语言编程,所以在使用语法上略显生疏了些,通过这次作业的实践过程,对C语言的编程语法规则熟悉了许多,虽然在运行过程中出现了一些错误,但也都能够较快地解决,第一次的数据结构实验作业总体完成的还算比较顺利。

C语言百钱买百鸡问题

C语言百钱买百鸡问题

C语言百钱买百鸡问题(我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?题目分析如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。

设公鸡x 只,母鸡y 只,小鸡z 只,得到以下方程式组:A:5x+3y+1/3z = 100B:x+y+z = 100C:0 <= x <= 100D:0 <= y <= 100E:0 <= z <= 100如果用解方程的方式解这道题需要进行多次猜解,计算机的一个优势就是计算速度特别暴力并且无怨无悔,所以我们可以欺负她、蹂躏她!因此我们用穷举法的方式来解题,需要101^3 次猜解,但对于计算机来说,小CASE!代码清单:1.#include<stdio.h>2.3.int main()4.{5.int i, j, k;6.7.printf("百元买百鸡的问题所有可能的解如下:\n");8.9.for( i=0; i <=100; i++)10.for( j=0; j <=100; j++)11.for( k=0; k <=100; k++)12.{13.if(5*i+3*j+k/3==100&& k%3==0&& i+j+k==100)14.{15.printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", i, j, k);16.}17.}18.19.return0;20.}运行结果:。

百钱百鸡问题教学设计

百钱百鸡问题教学设计

百钱百鸡问题教学设计百钱百鸡问题是源于中国古代数学的问题,旨在教会学生解决实际问题。

以下是一个可能的教学设计:1. 课程介绍:让学生了解问题的基本概念,解释百钱百鸡是关于计算用最少的钱购买最多数量的小鸡问题。

老师可以通过简单示例讲解问题的难点,比如买3只鸡要花多少钱?如果一只鸡要3块钱,那么买3只鸡要花多少钱?2. 问题解析:解释这个问题的主要难点在于涉及到整数运算的加法和乘法概念。

让学生理解加法是相加两个或更多数字的概念,而乘法则是重复相加相同数字的简便方法。

强调如何使用这两个概念解决这类问题。

3. 分析案例:提供一些简单的例子,让同学们自己练习计算。

例如:“用100元可以买多少只鸡?”和“每只鸡需要花费5元,那么用100元能买到多少只鸡?”以此类推,直到学生们能够自行解答此问题。

4. 组织讨论:让学生们在小组内部讨论,找出解题的方法。

小组之间分享答案和过程,鼓励学生之间的交流和合作。

5. 实践操作:老师分配任务,让学生们独立完成几道不同难度的问题。

每个同学可以根据自己的水平选择适当的问题,同时也能考验他们的逻辑思维和解决问题的能力。

6. 反馈与总结:请同学分享自己的解决方案,并分析正确的答案。

让学生分析不同的解题方法,探索最简捷的方法。

也可以提出一些扩展题目,以强化学生的数学技能。

通过上述教学设计,希望学生能够掌握加法和乘法的基本概念,培养数学思维,并能够解决百钱百鸡等问题。

同时,老师也可以灵活运用其他类似问题,使学生更加熟悉这些问题。

这种方法不仅可以提高学生们的数学能力,还可以让他们学会如何解决日常生活中的实际问题。

C语言解决百钱买百鸡问题

C语言解决百钱买百鸡问题

C语⾔解决百钱买百鸡问题我国古代数学家张丘建在《算经》⼀书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁⼀,值钱五;鸡母⼀,值钱三;鸡雏三,值钱⼀;百钱买百鸡,则翁、母、雏各⼏何?翻译过来,意思是公鸡⼀个五块钱,母鸡⼀个三块钱,⼩鸡三个⼀块钱,现在要⽤⼀百块钱买⼀百只鸡,问公鸡、母鸡、⼩鸡各多少只?题⽬分析如果⽤数学的⽅法解决百钱买百鸡问题,可将该问题抽象成⽅程式组。

设公鸡x只,母鸡y只,⼩鸡z只,得到以下⽅程式组:A:5x+3y+1/3z = 100B:x+y+z = 100C:0 <= x <= 100D:0 <= y <= 100E:0 <= z <= 100如果⽤解⽅程的⽅式解这道题需要进⾏多次猜解,计算机的⼀个优势就是计算速度特别暴⼒并且⽆怨⽆悔,所以我们可以欺负她、蹂躏她!因此我们⽤穷举法的⽅式来解题,需要101^3次猜解,但对于计算机来说,⼩CASE!代码清单:#include <stdio.h>int main(){int i, j, k;printf("百元买百鸡的问题所有可能的解如下:\n");for( i=0; i <= 100; i++ )for( j=0; j <= 100; j++ )for( k=0; k <= 100; k++ ){if( 5*i+3*j+k/3==100 && k%3==0 && i+j+k==100 ){printf("公鸡 %2d 只,母鸡 %2d 只,⼩鸡 %2d 只\n", i, j, k);}}return 0;}运⾏结果:百元买百鸡的问题所有可能的解如下:公鸡 0 只,母鸡 25 只,⼩鸡 75 只公鸡 4 只,母鸡 18 只,⼩鸡 78 只公鸡 8 只,母鸡 11 只,⼩鸡 81 只公鸡 12 只,母鸡 4 只,⼩鸡 84 只。

C语言·百元百鸡问题

C语言·百元百鸡问题

C语⾔·百元百鸡问题include <stdio.h>
//百元⽩鸡
/*
今有鸡翁⼀,值钱伍;鸡母⼀,值钱三;鸡鶵三,值钱⼀。

凡百钱买鸡百只,问鸡翁、母、鶵各⼏何?答⽈:鸡翁四,值钱⼆⼗;鸡母⼗⼋,值钱五⼗四;鸡鶵七⼗⼋,值钱⼆⼗六。

⼜答:鸡翁⼋,值钱四⼗;鸡母⼗⼀,值钱三⼗三,鸡鶵⼋⼗⼀,值钱⼆⼗七。

⼜答:鸡翁⼗⼆,值钱六⼗;鸡母四、值钱⼗⼆;鸡鶵⼋⼗四,值钱⼆⼗⼋。


翻译过来就是:公鸡⼀只5钱,母鸡⼀只3钱,⼩鸡三只1钱,也就是⼩鸡⼀只1/3钱。

只需要,x只公鸡价格 + y只母鸡价格 + z只⼩鸡*价格
价格分别是 5 3 1/3
*/
int main() {
int x, y, z;
printf("百元百鸡问题\n");
for (x=0; x<=100; x++){
for ( y = 0; y <= 100; y++ ){
z = 100 - x - y;
if (x + y + z == 100
&& 5x + 3y + (1.0/3.0)z == 100){
printf("公鸡有%d只,母鸡有%d只,⼩鸡有%d只\n", x, y, z);
putchar('\n');
}
}
}
return 0;
}
/
百元百鸡问题
公鸡有0只,母鸡有25只,⼩鸡有75只
公鸡有4只,母鸡有18只,⼩鸡有78只
公鸡有8只,母鸡有11只,⼩鸡有81只
公鸡有12只,母鸡有4只,⼩鸡有84只
*/。

百钱买百鸡三种算法(C#版)

百钱买百鸡三种算法(C#版)

百钱买百鸡三种算法(C#版)题⽬需求:鸡翁⼀值钱五,鸡母⼀值钱三,鸡雏三值钱⼀。

百钱买百鸡,问鸡翁、鸡母、鸡雏各⼏何?第⼀种算法(也是最消耗时间的,靠穷举进⾏求出):这种⽅法可以进⾏⼀些优化知道两个鸡的数量后,第三种也就知道了public static void Hundred_Money(){for (int i = 0; i <= 100; i++) {for (int j = 0; j <= 100; j++) {for (int z = 0; z <= 100; z++) {if (i*5+j*3+z/3.0f==100&&i+j+z==100){Console.Write ("公鸡数⽬有:{0},母鸡数⽬有:{1},⼩鸡数⽬有:{2}",i,j,z);Console.WriteLine ();}}}}}第⼆种算法:(利⽤数学公式进⾏推导)public void Hundred_Money1(){//公鸡的数量int cockCount = 0;//母鸡的数量float henCount=0;//⼩鸡的数量float smallCount=0;for (cockCount = 0; cockCount < 100; cockCount++){henCount = 25 - 7f / 4f * cockCount;smallCount = 75 + 3f / 4f * cockCount;if (henCount>0&&smallCount>0){if (((int)henCount==henCount)&&((int)smallCount==smallCount)){Console.WriteLine ("公鸡数⽬有:{0},母鸡数⽬有:{1},⼩鸡数⽬有:{2}",cockCount,henCount,smallCount);}}}}第三种算法(利⽤递归的⽅式进⾏计算):class MainClass{public static void Main(string[] args){MethodClass method = new MethodClass ();int[] priceArray={15,9,1};int[] resultArray={0,0,0};method.Hundred_Money2(priceArray,resultArray,300,0);}}class MethodClass{public void Hundred_Money2(int[] priceArray,int[] resultArray,int remain_money,int index){int time=remain_money/priceArray[index];for(int i=0;i<=time;i++){resultArray[index]=i;if(index==2){if(resultArray[0]+resultArray[1]+resultArray[2]==100&&resultArray[0]>=0&&resultArray[1]>=0&&resultArray[2]>=0)if(resultArray[0]*priceArray[0]+resultArray[1]*priceArray[1]+resultArray[2]*priceArray[2]==300)Console.WriteLine ("公鸡有:"+resultArray[0]+",母鸡有:"+resultArray[1]+",⼩鸡有:"+resultArray[2]);}else{int remainMoney=remain_money;remainMoney=remainMoney-priceArray[index]*resultArray[index];Hundred_Money2(priceArray,resultArray,remainMoney,index+1); }}}} 以上三种就是百钱买百鸡的三种算法!!!!!。

百鸡问题-不定方程

百鸡问题-不定方程

百鸡问题——不定方程中国古代数学名著《张邱建算经》中曾记载一道闻名世界的百鸡问题,题曰:“公鸡一只值钱5,母鸡一只值钱3,小鸡三只值钱1,今有钱一百,买鸡一百只,问公鸡、母鸡、小鸡各几何?”这是一道不定方程的问题,它可以在许多不定方程的书中找到,百鸡问题既很实际又很有趣,在其流传的一千多年中,人们为它的来源编织了好多美妙的传说,下面的故事就是其中的一例:公元前五世纪,有位姓张的贫苦人家的少年,他们全家只靠少年的父亲张老头卖鸡来维持生活。

这位少年聪明好学,又特别喜爱数学,他在十二三岁时,就已攻读了《九章算术》等数学名著,当地人称他为“张神童”,“张神童”的名字传开后,引起了一些人的兴趣。

一天,一位官员拿来一百文钱,要求按当时的鸡价:公鸡每只五文,母鸡每只三文,小鸡每三只一文,购买恰好一百只鸡。

“张神童”为一愁莫展的父亲解决了难题,他给来人送上4只公鸡,18只母鸡和78只小鸡,共百鸡,值钱百文。

第二天此人又带来一百文钱,还要买一百只鸡,但不能与上次重复。

这次“张神童”让父亲拿出18只公鸡,11只母鸡和81只小鸡,显而易见鸡值百钱,满足了来人的要求。

第三天,这个人带着一百文钱再次来到张家,还要求百钱买百鸡,且不能与上两次重复,“张神童”又一次为父亲解了围,他让父亲给来人12只公鸡,4只母鸡和84只小鸡,又凑成了百鸡值百钱,三次的考验使这位官员对“张神童”的神机妙算赞叹不已,从此“张神童”的名气更大了,这位“张神童”据说就是我国著名的数学家张邱建。

百鸡问题实际上是不定方程问题,用现在的解法比较容易。

我们不妨设公鸡、母鸡、小鸡各为x、y、z,则根据题意得:求此方程的正整数解。

将(2)×3-(1)得7x+4y=100……(3)由此得出x是4的倍数,且x<14,于是x只能是4,8,12代入(3)可得y的三个对应解是8,11,4,所以此问题有三组正整数解:这就是张神童的三组答案。

百钱买百鸡问题

百钱买百鸡问题

算法经典问题系列1 百钱买百鸡问题
一说起唐朝 人们就会情不自禁地想起诗歌 绝对没有人会提到数学在数
学上 虽说唐代并没有产生与其前的魏晋南北朝或其后的宋元相媲美的大师 却在数学教育制度的确立和数学典籍的整理方面有所建树.长达近三百年的唐代在数学方面最有意义的事情莫过于《算经十书》的整理和出版 这是高宗李治下令编撰的。

除了《周牌算经》《九章算术》《海岛算经》和《缀术》以外 《算经十书》中至少还有三部值得一提 分别是《孙子算经》《张丘建算经》和《缉古算经》'这三部书的共同特点是 每一部都提出了一个非常有价值的问题 并以此传世。

《张丘建算经》成书于公元5世纪 作者是北魏人.书中最后一道题堪称亮
点 通常也被称为"百钱买百鸡"问题 民间则流传着县令考问神童的佳话书中原文如下
今有鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买鸡百只
问鸡翁、母、雏各几何?
题目的意思是 公鸡5文钱1只 母鸡3文钱1只 小鸡1文钱买3只
现在用100文钱共买了100只鸡 问 在这100只鸡中 公鸡、母鸡和小鸡各是多少只?(设每种至少一只)算法分析
此题很显然是用枚举法 我们以三种鸡的个数为枚举对象(分别设为
x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件 穷举各种鸡的个数。

枚举法 常常称之为穷举法 是指从可能的集合中一一枚举各个元素 用
题目给定的约束条件判定哪些是无用的 哪些是有用的。

能使命题成立者 即为问题的解。

1.采用枚举算法解题的基本思路
2.确定枚举对象、枚举范围和判定条件。

C语言算法百钱买百鸡

C语言算法百钱买百鸡
{
int x, y ,z; //定义三个数进行循环
for (x=0; x<=100; x++)
{
for (y=0; y<=100; y++)
{
for (z=0; z<=100; z++)
{
if ((x+y+z==100)&&(5*x+3*y+z/3==100)&&(z%3==0)) //满足上面的条件时,就得出相应的结果
/*
程序演示:
百钱买百鸡的的问题:
鸡公一个,值钱五,鸡母值钱三,小鸡值钱一,百钱买百鸡,问公鸡,母鸡,小鸡各是几个
分析:
方程式如下:
a+b+c=100(百鸡)
5a+3b+c/3=100(百钱)
c%3=0
*/
/*
#include "stdio.h"
void main()
*/
#include "stdio.h"
void main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z=100-x-y;
if ((5*x+3*y+z/3==100) && (z%3==%d,y=%d,z=%d\n",x, y, z);
}
}
}
}
}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2.2 不满足,不做处理
4.3 变量增加,这里注意步长为3
流程图
图5-8 程序执行流程图
程序代码如下
#include "stdio.h"
main()
{
int x,y,z;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z+=3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);
}
}如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即 。请同学们自己分析二重循环和三重循环的运行次数,做为练习自己调试这一方法。
百钱买百鸡问题
例9-8 百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:
3.计算y循环,找到母鸡的只数;
4.计算z循环,找到小鸡的只数;
5.结束,程序输出结果后退出。
算法细化
算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
步骤4的细化
4.1 z=1
4.2 是否满足百钱,百鸡
4.2.1 满足,输出最终百钱买到的百鸡的结果
1)x的取值范围为1~20
2)y的取值范围为1~33
3)z的取值范围为3~99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。
数据要求
问题中的常量:

问题的输入:

问题的输出:
int x,y,z /*公鸡、母鸡、小鸡的只数*/
初始算法
1.初始化为1;
2.计算x循环,找到公鸡的只数;
相关文档
最新文档