北京最好白癜风医院 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 |