友情提示:380元/半年,儿童学编程,就上码丁实验室。
百钱买百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,且要求每种鸡都要有,问鸡翁、鸡母、鸡雏各几何?
公鸡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<x<20, 同理 0<y<33,那么0<z<100。有两个方程,三个未知量,称为不定方程组,则有多种解。
那如何用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只小鸡
做少儿编程越久,就会有很多的声音围绕着你,有些是支持并认同你正在做的事情,但是有些却并不看好。这是一件很正常的事情,毕竟一千个人心中便有一千个哈姆雷特。对于不看好的声音小编了解到的大致如下:
“Scratch对于编程来说太入门,没有必要学习或者没有必要学习那么长的时间。”家长甲说。
scratch真的太入门么?相信上述的事例已经回答了这个疑问。您能点开这篇文章您我便是有缘,若是您能从头至尾细细读来,便是对小编的莫大鼓励。