著名数学难题赏析-百钱百鸡
算法-经典趣题-百钱买百鸡

算法-经典趣题-百钱买百鸡本⽂为joshua317原创⽂章,转载请注明:转载⾃⼀、问题百钱买百鸡是⼀个⾮常经典的不定⽅程问题,最早源于我国古代的《算经》,这是古代著名数学家张丘建⾸次提出的。
百钱买百鸡问题的原⽂如下:鸡翁⼀,值钱五,鸡母⼀,值钱三,鸡雏三,值钱⼀,百钱买百鸡,问翁、母、雏各⼏何?这个问题的⼤致意思是公鸡5⽂钱1只,母鸡3⽂钱1只,⼩鸡3只1⽂钱,如果⽤100⽂钱买100只鸡,那么公鸡、母鸡和⼩鸡各应该买多少只呢?⼆、分析百钱买百鸡问题中,有三个变量:公鸡数量、母鸡数量和⼩鸡数量,分别设为x、y和z。
这三者应该满⾜如下关系:x+y+z=1005x+3y+z/3=100这⾥有三个变量,两个⽅程,因此是⼀个不定⽅程问题。
这将导致求解的结果不只⼀个。
可以根据上述两个⽅程来求出所有可能的结果。
三、编程package com.joshua317;public class Bqbj {public static void main(String[] args) {int n = 100;int m = 100;getBqbj(n,m);}/*** 百钱买百鸡* @param n 数量* @param m 钱数*/public static void getBqbj(int n, int m) {int x, y, z;for (x = 0; x <= n; x++) {for (y = 0; y <= n; y++) {z = n - x -y;if (z > 0 && z%3 == 0 && 5*x+3*y+z/3 == m) {System.out.println("x = " + x + ", y = " + y + ", z=" + z);}}}}}结果为:本⽂为joshua317原创⽂章,转载请注明:转载⾃。
[作文素材]张丘建百钱买百鸡名人故事
![[作文素材]张丘建百钱买百鸡名人故事](https://img.taocdn.com/s3/m/65b4a0f36c175f0e7dd1371e.png)
[作文素材]张丘建百钱买百鸡名人故事张丘建百钱买百鸡名人故事张丘建,南北朝时期北魏人,是我国古代一位伟大的数学家。
他的《张丘建算经》,是我国古代数学十大经典之一,内有等差级数、二次方程、不定方程等问题,对我国数学的发展起过重要作用。
张丘建小时喜欢读书,尤喜数学。
日常生活中,遇到计算方面的难题,别人不会,他却能解决,当时就被人称为数学神童。
他长大成名后,关于他小时候在计算方面的故事流传甚多。
这里介绍的“百钱买百鸡”的故事,便是其中的一个。
张丘建家中几代人都以养鸡为业。
他的父亲张公尤善养鸡。
他家的鸡,个大肉多,特别是当鸡瘟流行时,别人家的鸡常常死光,而他家的.鸡却安然无恙。
因此,前来买鸡的客人自然很多。
客户来买鸡,鸡的品种、大小不同,价格也不相同,买得多时,计算就颇麻烦了。
这时,往往是父亲还在费力地相加,小丘建已张口说出总价。
街坊四邻和买鸡客人见了,大为惊讶。
因此,附近有人遇上了难以计算的问题,便常来找他帮忙。
当地县令听说此事,不肯相信,遂决定考一考张丘建。
他派人把丘建的父亲张公找来,问道:“你卖鸡多少钱一只?”张公回答:“公鸡五文钱一只,母鸡三文钱一只,小鸡一文钱三只。
”县令说:“好,现在就按你说的价钱,给你一百文钱,买一百只鸡。
回去给我挑一百只鸡,立即送来。
”他想,来回路上需用两个时辰,这样复杂的问题,我看你儿子要多少时间才能算清。
张公回到家中,对儿子一说,张丘建略一思考,说:“一百文钱,可以买四只公鸡,十八只母鸡,再七十八只小鸡,正好不多不少一百只。
给他送去吧!”张公连忙按儿子所说挑选了一百只鸡,赶回县衙。
县令见刚好两个时辰多一点,再按送来的一百只鸡计算价格,正好一百文。
接着,县令又拿出一百文钱,仍要一百只鸡,只是公鸡、母鸡和小鸡的数目不能和这次一样。
张公回家,在约定的时间内,又送来八只公鸡、十一只母鸡和八十一只小鸡,共一百只鸡。
县令一算,仍是分文不差。
这一下,县令来了兴致,再拿出一百文钱,买一百只鸡,公鸡、母鸡、小鸡数则要和头两次都不一样。
多种解法求百钱百鸡问题

学号:0121210680225《算法设计与分析B》大作业题目多种解法求百钱百鸡问题学院计算机科学与技术学院专业软件工程班级Sy1201姓名李安福指导教师何九周2014 年12 月26 日多种解法求百钱百鸡问题摘要:中国古代数学家张丘建提出的“百钱买百鸡”可以采用蛮力法来解决。
本文给出了百钱百鸡问题的描述,采用蛮力法来解决这个问题,并通过分析对算法进行了优化,进一步提高了解决此问题的效率。
关键字:枚举,执行效率,蛮力法,不定方程,循环变量。
1引言蛮力法是一种简单直接地解决问题的方法,通常直接基于问题的描述和所涉及的概念定义。
这种方法经过很少的思考,把问题的所有情况或所有的过程交给计算机去一一尝试,从中找出问题的解。
由于计算机运算速度快,在解决问题时可采用这种“懒惰”的策略。
蛮力法的主要优点在于它是有广泛的适用性和简单性;它的缺点是大多数蛮力算法的效率都不高。
2问题概述 百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?3问题的分析题目分析与算法设计这是一个古典数学问题我们假设公鸡、母鸡和小鸡的个数分别为x,y,z,那么买公鸡的钱数为5x ,买母鸡的钱数为3y ,买小鸡的钱数为z/3;再由题意,x,y 和z 的和为100,问题化为可三元一次方程组,该问题的数学模型如下:⎩⎨⎧=++=++)(100)(1003/35百鸡百钱z y x z y x这里x,y,z 为正整数,且z 是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围:1) x 的取值范围为1~20 2) y 的取值范围为1~33 3) z 的取值范围为1~99对于这个问题我们可以用穷举的方法,遍历x,y,z 的所有可能组合,最后得到问题的解。
4算法设计 4.1算法设计14.1.1数据要求问题中的常量: 无无问题的输出:int x,y,z /*公鸡、母鸡、小鸡的只数*/4.1.2初始算法1.初始化为1(循环语句中初始值为1);2.计算x循环,找到公鸡的只数;3.计算y循环,找到母鸡的只数;4.计算z循环,找到小鸡的只数;5.结束,程序输出结果后退出。
百钱百鸡问题扩展

百钱百鸡问题及其扩展(陕西师范大学计算机科学学院10级计算机科学与技术)摘要:本文给出了一个百钱百鸡的问题,采用了贪婪法中的枚举法来解决这个问题,通过对比得出了较优的算法,并进一步的扩展了此问题,给出了最佳解决方案。
关键词:贪婪法;枚举法;扩展100 money and one hundred chicken problem and its extension( School of Computer Science ,Shaanxi Normal University ,level 10 computer science and Technology)Abstract: This paper presents 100 money and one hundred chicken problem, using the greedy method of enumeration method to solve this problem, by comparing the obtained optimal algorithm, and further extensions of this problem, and gives the best solution.Key words: greed method; enumeration; extension1、引言蛮力法是基于计算机运算速度快这一特性,在解决问题时采用一种“懒惰”的策略。
比较常用的有枚举法、穷举搜索算法等。
对于百钱百鸡问题,我们可能会想到列出两个三元一次方程,去解这个不定解方程,就能找出问题的解,所以我们想到用枚举法来进行算法设计。
2、问题概述百钱百鸡问题。
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?3、求解该问题的具体算法:枚举法用枚举法解决问题,通常可以从两个方面进行算法设计。
百钱买百鸡解题思路数学

百钱买百鸡这个题目是一个著名的数学难题,它要求用一百个钱币购买一百只鸡,其中公鸡x只,母鸡y只,小鸡z只,且x+y+z=100,且5x+3y+z/3=100。
使用现代计算机技术的优势,可以通过暴力穷举来解决这个问题。
小朋友也可以在Scratch编程中,通过引入变量和穷举法来实现这一过程。
首先,设置三个变量x、y和z,它们分别代表公鸡、母鸡和小鸡的数量。
设置一个计数器,用于显示穷举的执行时间。
然后,开始穷举。
从x的最小值开始,即0,依次增加到最大值,即100/5,检查是否满足x+y+z=100。
如果满足,继续检查是否满足5x+3y+z/3=100。
如果都满足,则表示找到了一个解。
在穷举过程中,可以使用计时器显示穷举的执行时间,以便学生了解求解过程的耗时情况。
最后,输出找到的所有解,包括公鸡、母鸡和小鸡的数量。
这些解可能有四种情况:公鸡0只,母鸡25只,小鸡75只;公鸡4只,母鸡18只,小鸡78只;公鸡8只,母鸡11只,小鸡81只;公鸡12只,母鸡4只,小鸡84只。
通过这种方式,可以使用Scratch编程解决这个数学难题,并且通过计时器显示执行时间,了解求解过程的耗时情况。
“百钱买百鸡”问题的C语言算法分析

“百钱买百鸡”问题的C语言算法分析Abstract:As a process-oriented programming language,C programming language is one of the most classic and popular computer programming languages with the characteristics of the assembly language and the high-level language.It is not only the first choice for the people who begin to learn computer programming,but also the basis for other computer courses and software development.As a difficult point in C Programming Language learning,the loop statement can be used to solve many practical problems of regularly repetitive operation.Taking the case of "spending 100 dollars on 100 chickens",the paper implements design,analysis and optimization,and finally proposes the optimal algorithm.Keywords:C programming language;loop statement;spending 100 dollars on 100 chickens1 引言(Introduction)计算机算法设计是计算机专业学习的核心专业内容,算法设计对于培养一个人的逻辑思维能力具有重要的作用,能进行有效的算法设计是对一个计算机学者的基本要求。
百钱百鸡问题

百鸡问题
公元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语言的编程语法规则熟悉了许多,虽然在运行过程中出现了一些错误,但也都能够较快地解决,第一次的数据结构实验作业总体完成的还算比较顺利。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学教研组
(共两课时120分钟)
我国古代数学书《张邱建算经》中有如下问题,也就是著名的百鸡百钱问题。
大意是:公鸡1只值钱5,母鸡1只值钱3,小鸡3只值钱1。
今有钱100,买鸡100只。
问公鸡、母鸡、小鸡各买几只?
关于这个“百鸡百钱问题”还流传着下面一个故事哩!
在我国南北朝的时候,京城里有个卖鸡的张老老,所生一子,天资聪颖,勤学不怠。
到十二三岁,已经博览群书,尤其富有算术的天才。
邻居每遇疑难问题,或是钱银上发生纠纷,都由他一言解决。
因此大家都叫他张神童,逐渐传扬开去,不久就远近闻名了。
当朝的老丞相爱才若渴,一天,听人谈到张神童的算法,心中很是不信,当下想了一个方法要去试探他,于是唤他的仆人去打听张老老卖的鸡是什么价钱。
不多时仆人回答说:“公鸡每只卖钱五文,母鸡每只卖钱三文,小鸡每三只卖钱一文。
”老丞相就拿出一百文钱,命仆人去给张老老,叫他尽这一百文钱把三种鸡配成一百只,不多不少,明天送来。
张老老暗想:这实在是一个难题,然而又不敢违命,当时只好一口答应。
等到收市后,就开始把三种鸡配起来。
但是左配右配,总是配不成。
正在无计可施的时候,他的儿子来了,问起情由,才知道是这样的一件事。
于是安慰着父亲,叫他不要着急,明天总有办法。
张神童当晚经过仔细研究,果然找到了答案。
第二天选出了“公鸡4只,母鸡18只,小鸡78只”叫他父亲送到相府。
老丞相拿来一算:4只公鸡值钱二十文,18只母鸡值钱五十四文,78只小鸡值钱二十六文,共计100只鸡,恰巧值钱一百文。
心里一高兴,立刻又拿一百文钱给张老老,叫他明天再送一百只鸡来,不过三种鸡的只数要换一种方法搭配。
张老老口头答应着,心里很是担忧,垂头丧气地回到家,忙和儿子商量。
儿子说:“你明天拿8只公鸡,11只母鸡,81只小鸡送去就是了。
”第二天张老老依言送去,老丞相一算,又是一点不错。
心里一高兴,又给张老老一百文钱,要再另配一百只鸡。
张老老暗想:这回恐怕是无法应付了。
不料他的儿子又检出“公鸡12只,母鸡4只,小鸡84只”叫父亲送
去。
老丞相一算,又丝毫不错,很是佩服,连忙问张老老是谁人配成的。
张老老只得照实说了。
老丞相立即召张神童来,授他官职。
后来张神童年纪渐大,曾发明通分简法,级数算法等,著了一部书名叫《张邱建算经》。
上面说的“百鸡百钱问题”也载在这部书中。
故事讲完了。
现在我们来研究一下这类题的解答方法:
(Ⅰ)算术方法
用纯粹的算术眼光来观察这百鸡题,却是一个普通的混合比例题。
因为100只鸡值钱一百文,平均每只就值钱一文。
所以就它们损益(即亏盈)的数可以求得混合量的比,再用配分法来分配得下表:
上表应这样理解,若每只公鸡、母鸡都作一文卖,亏损4+2=6(文),
1:1:9.于是依照这连比来把100只鸡分成3份。
但是鸡的只数必须是整数,而1+1+9=11,不是100的约数,所以这个连比不适用。
另行推求,得3:1:21就对了。
因为3+1+21=25,而25是100的约数,所以
若把混合量的比逐次推求下去,一定还可以得两个适用的连比:2:9:39,8:11:81.按照这些连比计算,就可得上面故事中张神童所作的另两个答案:公鸡4只,母鸡18只,小鸡78只:或公鸡8只,母鸡11只,小鸡81只。
上法推得符合要求的三个不同的混合量的比,就可求得三个不同的答案。
但是事实上要求得三个适用的连比,并非容易。
下面介绍方便一些的增减率加减法。
为此,我们先来研究张神童的三种答案的变化情况,发现公鸡的只数逐次多4;母鸡的只数逐次少7;小鸡的只数逐次多3.每次加多的鸡同减少的鸡都是7只,所以鸡的总数三次一样是100只。
这是应该注
×3=21文。
减少的7只母鸡恰巧也是值钱3文×7=21文,所以鸡的总价值三次都是一百文。
这是应该注意的又一点。
照此看来,这百鸡问题的答案,我们求到第一种之后,只要公鸡数加4,母鸡数减7,小鸡数加3,就可以求到其余的答案。
或先求到第三种答案,然后公鸡数减4,母鸡数加7,小鸡数减3,也可求得其他的答案。
这4,7,3我们可以称它做“增减率”。
再来研究一个问题,百鸡问题是否还有第四种答案呢?这很容易解决,用增减率加减就行了。
现在把第三种答案增减如下:
公鸡12+4=16只,母鸡4-7=-3只,小鸡84+3=87只,因鸡数不能是负数,所以这答案不适用。
若继续进行,母鸡的只数终不能成正数。
再把第一种答案增减:
公鸡4-4=0只,母鸡18+7=25只,小鸡78-3=75只,因为不能没有公鸡,所以这答案也不适用。
若继续进行,公鸡的只数又成负数了。
由此知道这个问题的答案再也没有第四种了。
(Ⅱ)代数解法
用代数眼光来观察百鸡问题,却是一个普通的不定方程问题。
因为未知数有三个,方程却只能列两个,所以答数也就不止一组了。
解:设公鸡x只,母鸡y只,小鸡z只,则公鸡共值钱5x文,母鸡
(2)×3-(1)得 14x+8y=200.
∴7x+4y=100.(3)
观察(3)式,4y同100都是4的倍数,所以x一定也是4的倍数,从小到大地用4的倍数来代x,同时求出y和z的值,列成下表:
表中只有前三组值是正整数,也正是本题的三种答案。
练习题
现用代数解法解下面类似的百钱买百货的古算题:
柑三梨四,一钱枣子买14。
百钱买百货,问柑、梨、枣各买几何?
题意是:柑子每个3文,梨子每个4文,枣子1文买14个。
100文钱可买柑、梨、枣各几个?
解:设买柑用钱x文,买梨用钱y文,买枣用钱z文。
根据题意可得如下方程组:
(4)-(3)得x+165z=900,
∴x=900-165z.
由于x,z都是0至100之间的整数,
所以只能有z=5.因此
x=900-165×5=75.
y=100-75-5=20.
答:买柑25个,买梨5个,买枣子70个。