如何用scratch解决百钱买百鸡?
“scratch还可以这样啊!”一位妈妈在看到自己的孩子用编程解决了一个古老的数学问题百钱买百鸡,惊喜地发出这样的感叹。
公鸡5钱一只,母鸡3钱一只,小鸡1钱三只,共有100钱数,要求如何用100钱买100只鸡,且要求公鸡、母鸡、小鸡都有。问要买公鸡多少只?母鸡多少只?小鸡多少只?
从现代数学观点来看,实际上是一个求不定方程整数解的问题。解法如下:
设公鸡、母鸡、小鸡分别为x、y、z 只,由题意得:有两个方程,三个未知量,称为不定方程组,则有多种解。
①……x+y+z =100
②……5x+3y+(1/3)z =100
下面再看看x,y,z的取值范围。
由于只有100钱,由5x<100 => 0<="" p="">
那如何用scratch来解决这一问题呢?新建三个变量“公鸡的数量”、“母鸡的数量”、“小鸡的数量”,作为小学生可能还不能够深刻理解用变量来表示算数表达式,如果类比数学应用题中的设未知数“x”、“y”、“z”,这便容易理解多了,这道题便是这样,可以得到两个关于变量的算数表达式。
百钱买百鸡最适宜学习穷举法(枚举法),所谓穷举法,顾名思义穷尽每一种可能性,通常在找不到解决问题的规律时对可能是解的众多候选解按照某一顺序进行逐一枚举和检验,并从中找出那些符合要求的候选解作为问题的解。考虑到算法的时间复杂度与空间复杂度还可以不断优化,方法并不唯一。
scratch拥有计时器的功能,可以更加直观的将程序执行所需时间显示出来。
方法一:x的取值范围为1~20, y的取值范围为1~33,z的取值范围为3~99(以3的数量增加),利用三层循环嵌套遍历x、y、z的所有可能的组合。程序执行完成所花费的时间约为4秒,当然也可以简化此程序。
方法二:公鸡的数量为x,母鸡的数量为y,小鸡的数量为z,从1开始穷举小鸡与母鸡的数量,则公鸡的数量为x=100-y-z,只需要两层循环嵌套便可实现。程序执行完成所花费的时间约为0.5秒。
方法三:一层循环的实现方法需要推算一下这个不定方程。
x+y+z=100 ①
5x+3y+z/3=100 ②
令②x3-① 可得
7x+4y=100
=> y=25-(7/4)x ③
同理可推得
=> z=75+(3/4)x ④
程序执行完成所花费的时间约为0.01秒。
学生通常会带给老师很多启发,这比老师带给学生的更具冲击感。解决这一问题,可能是根深蒂固的固有思维,我们往往穷举鸡的数量,但是,一次上课,一位同学设的变量为每种鸡所花费的钱数,于是豁然开朗。
方法四:利用三层循环嵌套穷举钱数,程序执行完成所花费的时间约为9.3秒。当然还可以继续改进该程序,用两层循环或者一层循环均可。
考虑到每种鸡都要有,则共有3组数成立:
4只公鸡18只母鸡78只小鸡
8只公鸡11只母鸡81只小鸡
12只公鸡4只母鸡84只小鸡
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com