单元三 · 用算法解决问题
第10课 猜数游戏有捷径

一、学习目标
- 通过猜数游戏认识二分法,从具体情境中确定二分法查找的对象、范围和判断条件。
- 了解二分法在生活中的应用,知道用二分法解决简单的实际问题,初步体会用算法解决问题的优势。
二、情境导入
小智和爸爸玩猜数游戏,爸爸总能很快就猜中。小智好奇爸爸为什么这么快,爸爸告诉小智,自己运用了一种名为「二分法」的算法。
想一想:你是不是也想提高自己猜数的速度呢?一起来探索这个算法吧!
三、核心讲解
本课学习路径:
1.体验猜数游戏
两个同学一组,依据以下规则,玩一玩猜数游戏。
- 有一个 1 到 100 之间的自然数,通过猜测的方式来确定这个数。
- 每次猜测并说出一个数后会得到一个提示:说出的数相对于要猜的数是大了还是小了,或者猜对了。
- 通过不断缩小数值范围来逼近要猜测的数,直到猜对这个数。
一位同学默想一个数,让另一位同学猜。两位同学各猜一轮,记录猜测的次数和结果。例如:第 1 次猜 50,判断结果「小了」,猜数范围变为 51~100。
观察猜数范围的变化规律:如果猜的数不正确,猜数的范围就可以根据猜数的位置逐渐缩小,直到找到符合的数。猜数范围越小,猜出指定数的可能性就越大。那么,是否有快速缩小猜数范围的算法呢?
2.二分法查找的算法描述
扩大猜数范围至 1~1000,利用二分法继续猜数。一个同学默默想一个数,另一个同学猜,直到猜对为止,记录猜测的次数和范围。
当数值范围扩大到 1~1000 时,用二分法来猜所需次数大约是 10 次。如果继续把数值范围扩大到 1~10000、1~100 万,所需的猜测次数大约分别是 14 次和 20 次。相比按顺序依次猜测的方式,猜测次数大大减少了。
二分法查找的算法描述:
- 在要查找的一组有序数中,取中间位置的数与要查找的数比较,如果两者相等,则查找成功。
- 如果不相等,就以中间位置的这个数为分界,把这组数分成两部分。中间位置的数大于查找数,则进一步查找比这个数小的那部分;否则进一步查找比这个数大的那部分。
- 重复以上两个步骤,直到找到满足条件的数。
流程图:二分法猜数(缩小范围循环)
3.用二分法解决问题
在早上 8 时到晚上 8 时之间,快递员放在小区货架上的一箱货物不知道被谁错拿了,但有监控摄像头一直可以拍报到这个货架。现在需要查看监控视频,找到拿错快递的人。请想办法提高查看监控视频的效率。
方法提示:利用二分法查看监控视频,即首先查看视频的中间处(下午 2 时),看丢失的货物是否还在。如果还在,就继续查看后半段视频的中间处(下午 5 时);如果不在,就查看前半段视频的中间处(上午 11 时)。以此类推,不断缩小查看的范围。
本课新语法与图形块
本课首次出现:条件循环 while。二分猜数思路见课文;载入后对照积木。
| 语法 | 图形块 | 说明 |
|---|---|---|
while 条件: | ![]() | 条件成立就一直重复 |
弄清以上要点后,再进入下方 Python Online,用程序体验二分猜数。
四、动手体验 · Python 3 Online 编程
本课含 2 个程序,请在下拉中切换后分别「载入」运行。
五年级 · 程序自动用二分法逼近秘密数 37,观察每一步猜测。
正在载入 Python 3 Online
正在载入编程环境…
五、课堂总结
- 利用二分法猜数,可以快速缩小要猜的数值范围。
- 在实际生活中,合理利用二分法来解决问题,可以提高效率。
- 使用算法解决问题时,不同的算法对问题解决的效率也会不同,不同的数据规模也会影响算法的效率。
六、拓展提升
- 「猜一猜我在哪里」游戏。下图中的一个圆圈表示一个位置,一位同学想定一个位置并写下来,让另一位同学猜这个位置,每猜一次提示对方偏向了哪个方向,直到猜对为止。
测评
选出后点「检查」。答错会显示简短说明。
二分法猜数时,每次应猜哪个数?
把猜数范围从 1~100 扩大到 1~1000,用二分法猜测次数大约变为多少?
判断:查找错拿快递的人时,从监控视频中间时间点查起、再缩小范围,体现了二分法。
本节小结
二分法每次把搜索范围缩小一半,猜数、查监控都能事半功倍。算法选对了,数据规模再大也不怕——这就是用算法解决问题的优势。
