欢迎光临
我们一直在努力

Scratch第二十三讲:数学系列——牛吃草问题

上一讲聊了用计算机算法去做逻辑题的方法。方法很简单,就是用循环把所有的可能性都做一遍。今天CC哥再用计算机的方法来跟大家尝试一下一个经典熟悉问题:牛吃草问题。

———— / 小升初的牛吃草问题 / ————

大家知道吗?牛吃草问题又叫牛顿问题,传说是牛顿提出来的。(想不到牛顿还有这个梗)

牛顿问题,因由牛顿提出而得名,也有人称这一类问题叫做牛吃草问题。英国著名的物理学家牛顿曾编过这样一道:牧场上有一片青草,每天都生长得一样快。这片青草供给10头牛吃,可以吃22天,或者供给16头牛吃,可以吃10天,期间一直有草生长。如果供给25头牛吃,可以吃多少天?

用小学数学的解法:牛每天吃草,草每天在不断均匀生长。解题的关键是:

1、求出每天长草量;

2、求出牧场原有草量;

想:这片草地天天以匀速生长是分析问题的难点。把10头牛22天吃的总量与16头牛10天吃的总量相比较,得到的10×22-16×10=60,是60头牛吃的草,平均分到(22-10)天里,便知是5头牛一天吃的草,也就是每天新长出的草。求出了这个条件,把所有头牛分成两部分来研究,用其中一部分吃掉新长出的草,用另外一部分吃掉原有的草,即可求出全部头牛吃的天数。

设一头牛1天吃的草为一份。

那么10头牛22天吃草为1×10×22=220(份),16头牛10天吃草为1×16×10=160(份)

(220-160)÷(22-10)=5(份),说明牧场上一天长出新草5份。

220-5×22=110(份),说明原有老草110份。

综合式:110÷(25-5)=5.5(天),就能算出一共多少天。 [2]

如果想求出有多少牛,那么题目一定会告诉你原来的草量,方法就和求草一样。你可以先写出求草的算式,再带入数字。

———— / 用方程来解决牛吃草 / ————

上面的算术解法,大家理解没有?其实有点不好理解。实在理解不了就去问问学而思的老师吧。如果用方程的做法就简单了。(小学生请忽略)

我们假设原有草量为Y,草每天的生长量为X,得到如下方程组:

10×22=22X+Y

16×10=10X+Y

解此方程组,可得X=5,Y=110,N=5.5,因此25头牛用五天半的时间就能吃完这些草。

这个如果不会解方程的话,可以问问爸爸妈妈,他们一定会的。

———— / 用编程来解决牛吃草 / ————

其实编程是不合适用来解方程的,特别是复杂的方程更不好解。编程的基本逻辑就是一个一个值代入方程去试,当然针对不同的方程,会有一些公式去减少实验值的取值范围,或加速靠近正确值得方法。同时很多方程都不是整数解,所以往往只能得出近似值,不能得出准确值。比如如果是1/3,计算机只能得出0.33333...得一个近似值。

不过我们今天主要只是学习计算机编程的逻辑,并不去细究是否准确和合理。所以既然是二次方程,我们就用最简单的2次嵌套循环就搞定了。方法和上一讲的逻辑差不多。

———— / 小猫的代码 / ————

主要是把变量初始化做一下。

———— / 小牛的代码 / ————

这段代码主要是来计算了。这里面有几点要注意:

1:既然用计算机的计算能力来实验,那就有一个实验取值的问题,你也可以把初始的草量和每天新增的草量取0~无限大,那就永远算不完了。所以我们要给定一个范围取值,不可能为负数,所以最小值取零。初始草量和每天新增量怎么也不可能大于160呀。(16*10)所以这两个变量我们就取0~160之间吧。(这里面我们不严谨的假设了两个变量都是正整数)

2:方法也很简单,跟上次一样,用循环,第一层循环为初始草量的循环,第二层为每天新增草量的循环。把所有的可能值都实验一遍,假设碰到两种情况都满足,那么这一组值就是正解了。

———— / 总结 / ————

今天的内容相对简单,就是对循环的又一次应用,同时让大家进一步理解了,用计算机的方法如何去处理数学问题的最基本的方法。

超乎想象的使用体验

加的时候请备注:Scratch。

赞(79)
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址