时间:2025/7/23来源:本站原创作者:佚名
北京最好白癜风医院 http://www.kstejiao.com/m/
雷安萍讲皮肤病 http://baidianfeng.39.net/a_qwzj/250504/f7vgl13.html

今天我们分享一个古代数学趣题《百鸡百钱》。

《百鸡百钱》是我国古代数学家张丘建在《算经》一书中提出的数学问题:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”我们把文言文翻译成白话文,意思是:公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

百钱白鸡的解法有很多,下面介绍两种常用的数学解题方法:1.配平法

1只母鸡配3只小鸡,则4鸡4钱,平衡;

1只公鸡配3只小鸡,则4鸡6钱,钱多,需要加小鸡;

1只公鸡配6只小鸡,则7鸡7钱,平衡;

四鸡四钱、七鸡七钱分百鸡百钱;

很显然,我们可以一眼就看出25组的四鸡四钱符合要求;另外每7组的四鸡四钱可以等量替换为4组七鸡七钱。因此,四鸡四钱18组、七鸡七钱4组;四鸡四钱11组、七鸡七钱8组;四鸡四钱4组、七鸡七钱12组也符合要求。然后我们将四鸡四钱和七鸡七钱给拆分开来,就可以得到下面四组答案:

1.母鸡25只,公鸡0只,小鸡75只

2.母鸡18只,公鸡4只,小鸡78只

3.母鸡11只,公鸡8只,小鸡81只

4.母鸡4只,公鸡12只,小鸡84只

2.方程组法

设公鸡x只,母鸡y只,小鸡z只,得到以下方程式组:

方程A:5x+3y+1/3z=

方程B:x+y+z=方程C:0≤x≤方程D:0≤y≤方程E:0≤z≤我们有3个未知数,2个个方程式,属于一个不定方程问题,解这类方程,我们通常可以采用试数法,并结合整除法、尾数法、和奇偶法等来进行计算,如果是采用手工计算,会比较繁琐枯燥,但是我们可以采用计算机编程来解决,下面分享用Scratch的解决方案。1、分析与解题

按照第2种方程组解法,我们设置五个变量,分别是公鸡、母鸡、小鸡、钱以及鸡的数量,另外我们建立一个列表用来存放计算出的答案。

给变量赋初始值:

按照方程组法列出的方程,将数学方程转化为Scratch的编程语言:

编程解决方案一:

(1)三层循环找满足两个方程组的x、y和z值;

(2)先固定公鸡x的数量;

(3)对于每个新的x,母鸡数量y从0开始,循环次;

(4)母鸡数量y从0开始,对于每个y值,小鸡数量z从0开始,一直循环次。

(5)x、y、z三层循环体,循环次数次(对应上面的方程C、D、E)

(6)是否满足方程组A、B的判断结构

编程解决方案一的完整程序如下:

编程解决方案二(优化一):

在编程解决方案一中,x、y、z的三层循环次数均为次,计算机共计要计算××次(1百万次),我们在运行Scratch时可以明显的看到,四组答案已经算出来了,但是电脑还没有迭代计算完毕,为了更快的得到答案,我们可以对程序进行优化。

通过我们对题目更深层次的解读,我们可以发现,我们的方程CDE可以进一步地缩小范围,比如方程C,公鸡是5块钱一只,块钱,全买公鸡,最多就买/5=20只,所以公鸡我们最多循环到20次就可以了。

同理,母鸡我们只需要循环/3=33次。

小鸡循环的次数则为,这里我们要注意,因为最多就买只鸡,所以小鸡尽管价格便宜,1块钱买3只,但全买小鸡咱也只能买只,所以小鸡的运算次数还是原来的就可以了。

通过上面的优化,我们可以将万次的运算次数降低至20×33×=次,通过减少计算次数,我们将效率提高了93.4%,同时降低了计算对计算机的需求,优化后的解决方案如下:

编程解决方案三(优化二):

方案二经过优化后,计算次数虽大为降低,但仍需要计算6万多次,我们有没有什么方法可以进一步降低计算次数呢?方案一和方案二都是三层循环,如果我们将三层循环降低一层的话,那么是不是我们的计算次数至少就可以下降个量级?

我们看到方程A,三种鸡的数量的和为,如果我们只设2个未知数,公鸡x、母鸡y、则小鸡就可以写为:z=-x-y。

此时,我们的判断条件也发生了相应的变化,之前需要同时满足方程A和B,此时只要单独判断是否满足方程B就可以了,判断条件如下:

优化后,计算次数再一次降低,总计算次数为20×33=次,计算次数仅相当于第二方案的1%,完整程序如下:

编程解决方案四(优化三):

方案四与方案二和方案三类似,简化为公鸡x和母鸡y的两个循环,小鸡z用x和y来表示,不同之处为,采用“重复执行直到”命令代替“重复执行()次”命令,程序具体如下:


转载请注明原文网址:http://www.gzdatangtv.com/bbqb/bbqb/19854.html
------分隔线----------------------------