极客小将

您现在的位置是:首页 » scratch编程资讯

资讯内容

水手分椰子:用Scratch 巧解奥数题

极客小将2021-03-30-
在一次航海中,有三名水手和一只猴子因船舶失事而被困在一个荒岛上,他们发现岛上仅有的食物是椰子。水分们齐心协力,劳累了一天,收集了许多椰子。天黑了,他们决定先去睡觉,等第二天起来后再分配椰子。 当天夜里,一个水手醒来,决定

在一次航海中,有三名水手和一只猴子因船舶失事而被困在一个荒岛上,他们发现岛上仅有的食物是椰子。水分们齐心协力,劳累了一天,收集了许多椰子。天黑了,他们决定先去睡觉,等第二天起来后再分配椰子。

当天夜里,一个水手醒来,决定拿走属于他的那份椰子而不想等到早上。他把椰子分为相等的三堆,但发现多出了一个椰子,于是把这个椰子给了猴子。接着他藏好了自己那份椰子就去睡觉了。不久,另一个水手也醒来,他做了与第一个水手同样的事,也把多出的一个椰子给了猴子。而当第三个水手醒来后,他也跟前两个水手一样分了椰子,也把多出的一个椰子给了猴子。

第二天早晨,当三名水手起来时,他们决定把椰子平分为三堆,每人一份,并把多出的一个椰子也给了猴子。

小海豚科学馆请你算一算,水手们最少收集到多少个椰子?

【编程解题】

根据故事中的描述,每一个水手分椰子的过程是,把一个椰子给猴子,再把椰子平均分为3份,自己藏起一份,留下两份。水手们在头天夜里和第二天早晨共分了4次椰子。

小海豚科学馆推荐你采用枚举法,让椰子数从4开始递增,并判断椰子数能否用4次分完。如果刚好能分完则求得问题的解;否则继续增加椰子数,再模拟分椰子,直到刚好分完为止。

下面小海豚科学馆给出用枚举算法描述的流程图如下。

upload/article/images/2021-03-30/f6c414615bdaef101743c5c7d722f381.jpg

接下来,根据上面介绍的算法,小海豚科学馆带你来编写主程序。

首先,我们创建一个名为“x”的变量,并赋初值为4;再用“重复执行直到……”指令构建一个循环结构,在循环体中逐一增加变量“x”的值。这就是一个枚举算法的基本结构。

upload/article/images/2021-03-30/847cbfc49ecc5fdd8ec25ee06858e2a6.jpg

对于每一个“x”的值,我们调用模块“水手分椰子”进行检测,如果椰子能分完,则结束循环,输出问题的解。否则就继续检测下一个“x”的值。

upload/article/images/2021-03-30/2af1a37494c4a31e57c01c761919b7bc.jpg

接下来,我们还需要一个重要的模块 “水手分椰子”来检测列举的椰子数是否能分完。小海豚科学馆带你继续编写模块。

模块:水手分椰子

创建一个名为“水手分椰子”的模块,参数是一个名为“椰子”的数字参数。

upload/article/images/2021-03-30/e4fe5c6485d4c1494e021618fe8a98ae.jpg

创建一个名为“椰子”的变量,并将参数“椰子”赋给变量“椰子”。请注意参数“椰子”和变量“椰子”的指令块颜色不同。

upload/article/images/2021-03-30/6a84d5051aaa0b66ec9b9e36d4a97529.jpg

接下来,在一个“重复执行……次”的循环结构中对变量“椰子”进行3次迭代。

根据故事描述,3名水手夜里先后偷偷分了3次椰子,每一次都是把1个椰子给了猴子,再把剩下的椰子均分为3份,自己藏起来1份,只留下2份。因此,这个过程可以表示如下:

upload/article/images/2021-03-30/c7240050aa170cb4e6547433d4554f6a.jpg

当天亮后,水手们一起又分了一次椰子。把一个椰子给了猴子,其余的均分成3份,一人一份。可以用下面等式表示:

upload/article/images/2021-03-30/e1d2d68f9fd009eb47fcb4e98ca2d410.jpg

然后把这个等式放入一个“如果……那么……否则”的条件判断指令中。

upload/article/images/2021-03-30/36f674360afd97c06cf811c7171fedb7.jpg

如果条件满足,则把变量“椰子分完”设定为1,否则设定0。

到此,模块“水手分椰子”的代码编写完毕,模块的代码如下。

upload/article/images/2021-03-30/3a6c270f9cd767110c9b9bc21ff01c77.jpg

到这里,解决“水手分椰子”问题的全部代码编写完毕,小海豚科学馆给出完整代码清单如下。

        upload/article/images/2021-03-30/b7e00becf0aa43f828b06887a8455719.jpg

点击绿旗运行程序,得到结果:椰子总数最少是79。

        upload/article/images/2021-03-30/9081c1a990f2d33c54ca791943beb218.jpg

【试一试】

“水手分椰子”问题据说是伟大物理学家狄拉克提出的趣味数学题,曾登载在美国《星期六晚邮报》上。后经美国数学科普大师马丁·加德纳的介绍后更是广为流传。1979年,诺贝尔物理学奖获得者李政道博士在中国科技大学少年班讲学时,对“水手分椰子”问题作了简单变形,提出了一个五猴分桃的问题:

五只猴子采得一堆桃,它们约定次日早上起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。请问桃子数最少有多少个?

请你试一试,用Scratch编写程序求解这个问题。

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除

网友点评

共有5条评论来说两句吧...

在线客服