2024年5月1日发(作者:)
Scratch趣味数学之百元买百鸡
作者:陈新龙
来源:《电脑报》2020年第20期
我正在研究一道数学题,古代数学家张丘建在《算经》中的百元买百鸡问题:鸡翁一值钱
五,鸡母一值钱三,鸡雏三值钱一,一百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?公鸡五元一
只,母鸡三元一只,小鸡一元三只,现有一百元要买一百只鸡可以有几种买法?
“百鸡问题”在世界上首次提出三元一次不定方程及解法,也是经典的奥数题目。如果手工
计算的话就算知道解法也不容易,但用Scratch编程用穷举法来解这道题目的话,就显得简单
直接了。
编程之前我们先在草稿纸上根据题目写出不定方程。
设X:公鸡Y:母鸡Z:小鸡
则X+Y+Z=100(只)
5X+3Y+Z/3=100(元)
為了编程时控制总运算量,先根据总价100元估算公鸡、母鸡、小鸡的数量范围,公鸡的
数量不能超过20只,母鸡的数量不超过33只,小鸡的数量不超过100只,在做题之前我们先
把这些关系整理清楚,就方便多了。
算法代码核心部分如图1。
设定四个变量,其中三个变量分别对应公鸡、母鸡、小鸡,还有一个变量对应列表值(目
的是为了进行列表输出)。因为方程的解不唯一,还要设定三个列表存储方程的解。定义公
鸡、母鸡、小鸡的初始值要分别在各自循环前定义,并且不要忘记在每次循环结束前对公鸡、
母鸡、小鸡的数目增加1,利用三重循环嵌套进行穷举计算,最终获得结果。
之前我们已经分析了公鸡、母鸡、小鸡的取值范围,相当于确定了程序循环范围,也就是
公鸡循环20次,母鸡循环33次,小鸡循环100次,3层循环嵌套,在最里层判断如果
X+Y+Z=100与5X+3Y+Z/3=100成立,即获得一组解,每获得一组解将“鸡的列表值”加1,将
X、Y、Z数字存入列表相应位置,当循环完成后就可以获得全部解了(如图2)。
外观方面可以像我一样增加一些对话环节,大家可以在网盘下载源代码参考。
百钱买百鸡我们用到了穷举法(枚举法),所谓穷举法,顾名思义就是穷尽每一种可能
性,通常在找不到解决问题的规律时对可能是解的众多候选解按照某一顺序进行逐一枚举和检
验,并从中找出那些符合要求的候选解作为问题的解。考虑到算法的时间复杂度与空间复杂度
还可以不断优化,方法并不唯一。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714573151a2472666.html
评论列表(0条)