单元七 · 了解更多的算法

第24课 多人过河巧安排

任务场景
任务场景:多人过河巧安排

一、学习目标

  • 尝试把一个大问题分解成小问题来解决,培养解决问题的能力。
  • 通过发现解决小问题的方案来解决大问题,初步了解规划算法的思想。

二、情境导入

一支由 10 个成年人组成的探险队要过河,但河宽水深,没法游过去,附近也没有桥。这时,他们看到 2 个少年划着 1 条小船过来,就请求帮助。但这条船太小,每次只能承载 1 个成年人或者 2 个少年。如果 2 个少年与探险队成员都能单独划船过河,这支探险队如何过河?

三、核心讲解

本课学习路径:

1规划探险队过河的方法
2用流程图描述过河的过程

1.规划探险队过河的方法

已知条件:

  • 10 个成年人要过到河对岸。
  • 有两个少年利用一条小船帮助他们。
  • 船上只能有一个成年人、一个少年或两个少年。
  • 成年人和少年都能单独划船。

任务目标:在两个少年的帮助下,10 个成年人全部过河到对岸。

解决关键:明确过河过程中两个少年的位置;理清一个成年人过河的过程,其他人按照相同方法过河。隐含条件:10 个成年人可以一个一个地过河。

分析一个成年人过河的步骤:

  1. 两个少年划船到对岸(B B →)。
  2. 一个少年划船回来(B ←)。
  3. 一个成年人划船到对岸(A →)。
  4. 另一个少年划船回来(B ←),准备送下一位成年人。

一个成年人过河后,可以用重复多次的方法解决整个问题,每个成年人用相同的方法过河。

想一想:如果是 20 个成年人过河或者更多人过河,如何修改算法?

2.用流程图描述过河的过程

流程图:探险队过河(循环运送)

开始过河安排一次往返队员都到对岸?是少年划船离开否继续循环任务完成

只需把一个成年人过河的步骤循环 10 次,就可以把探险队员都送到对岸,两个少年也可以划船离开了。

规划思想:把大问题分解成小问题。小问题和大问题的性质是一样的——本任务中送 10 个成年人过河,可分解为送一个成年人过河,每个人的过河方式相同。引导问题朝着规划好的小问题方向发展,就能用解决一个小问题的方式解决整个大问题。

本课无新基础语法;过河策略见流程图。列表与 for 已学过。

弄清以上要点后,再进入下方 Python Online,按步骤输出过河策略。

四、动手体验 · Python 3 Online 编程

五年级 · 过河:按步骤输出策略。

五、课堂总结

  • 探险队过河问题是把 10 个人过河问题分解为 1 个人过河问题。
  • 要解决问题就要学会将大问题分解为小问题;根据问题需求,小问题也可以再继续分解,当问题分解到足够小时,解决起来就容易多了。
  • 在问题分解过程中,发现解决问题的规律后,依据规律,可以利用循环结构来解决重复操作的问题。

六、拓展提升

  • 有一位猎人带着一只羊、一头狼和一筐白菜过河。河边有一条小船,但船太小,每次猎人只能载狼、羊和白菜三者中的一个过河。猎人不在旁边时,狼会吃羊,羊会吃白菜。请问猎人怎样才能把狼、羊、白菜都安全运过河?

测评

选出后点「检查」。答错会显示简短说明。

  1. 探险队过河问题体现了什么算法思想?

  2. 10 个成年人都用「一个成年人过河」的相同方法,程序中常用什么结构实现?

  3. 本课过河问题中,小船的载重限制是?

本节小结

探险队过河把「10 人过河」分解为「1 人过河」的重复;规划思想是抓住小问题与大问题性质相同,再用循环完成重复操作。