APP下载

趣味数学——水手分椰子

2020-01-13

电脑报 2020年45期
关键词:流程图椰子水手

水手分椰子是一道挺有名的趣味数学题,有利于我们理解递归的算法:有三个水手和宠物狗因船只触礁被困在一个荒岛上,岛上仅有的食物是椰子,三个水手齐心协力摘了很多椰子。天黑了,他们决定去睡觉,等第二天醒来再分配椰子。当天夜里,一个水手醒来,决定拿走属于他的那份椰子而不想等到早上。他把椰子分为相等的三堆,但发现多出了一个椰子,于是把这个椰子给了宠物狗。接着他藏好了自己那份椰子就去睡觉了。不久,另一个水手也醒来,他做了与第一个水手同样的事,也把多出的一个椰子给了宠物狗。而当第三个水手醒来后,他也跟前两个水手一样分了椰子,也把多出的一个椰子给了宠物狗。第二天三名水手起床,决定把椰子平分三堆,每人一份,并把多出的一个也给了宠物狗,那么请问水手们一共摘了多少个椰子呢?

根據题目的描述,每个水手醒来之后将椰子分成三份,把自己一份藏起来了,留两份给其他水手,一共分了四次椰子。我们可以采用枚举法,让椰子数从4开始(4是我们假设的数字,假设最后每个水手得到一只椰子,宠物狗也得到一只椰子,一共是4只椰子),然后依次从4开始递增,并按照枚举法判断椰子是否能够分完,如果刚好分完停止程序得出最终的答案,否则的话继续增加椰子数量再次进行判断,直到椰子全部分完。接下来用一张流程图来把我们的思路给整理一下:

下面我们按照流程图的思路开始编写代码,首先新建一个变量X,假设最后只剩下4只椰子则X的初始值为4开始。并且增加判断变量“椰子是否分完”其初始值为0。接着指令构建一个循环结构,在循环体中逐渐增加变量X的值,这就完成了枚举算法的基本结构。对于每个X的值,我们需要调用自制的积木模块进行检测,如果椰子能够分完,结束循环,输出椰子的数量,这个值就是符合题意的最小值,否则的话继续检测下一个X的值。

创建自制积木的时候我们需要添加“椰子数量”的数字参数,并且新增加一个变量“椰子”用来存放每次传入X的值,根据故事描述,三名水手夜里偷偷分了三次椰子,每次都是把一个椰子给了宠物狗,剩下的椰子平均分成三份,自己藏起来一份留下两份,那么可以将过程表示为(((椰子数量-1)/3)*2)重复执行三次。天亮之后,水手们又分了一次椰子,把剩下的一只椰子分给了宠物狗,其他的分成三份一人一份全部分完,所以我们还需要添加判断椰子是否分完的判断,如果(椰子-1)除以3的余数等于零就表示椰子全部分完,否则椰子没有分完就需要X继续增加1,继续进行枚举。最终我们可以得出答案最少有79个椰子。

现在数学知识编程化的趋势越来越明显,我们在学习时都可以利用编程的思想进行各种创作,我也会和大家分享更多有趣的编程小知识。

猜你喜欢

流程图椰子水手
云的识别指南
ISTEN
椰子旅行记
老水手的愿望
椰子漂流记
流程图学习指南
水手