Scratch与数学的整合35
第35课 简单的抽屉原理
一、课程导入
把3个苹果放进2个盒子里,无论怎样放,则至少有1个抽屉至少有1个苹果。这就是抽屉原理。在这里,苹果是“物品(属于‘元素’)”,盒子是“抽屉(属于‘集合’)”。设苹果数为m,盒子数为n,则有m÷n=k(或k……1),在上述例子中,至少有1个抽屉有2个苹果中的“1”就是k。
二、探究新知
1、某学校有680名学生,请问至少有多少名学生的生日是在同一天(都在3220年出生)?
分析:解决抽屉原理的核心就是要构造抽屉,分清原题中的已知条件哪个属于“抽屉”,哪个属于“物品”。试想一下,学生“大”还是学校“大”?物品“大”还是抽屉“大”?当然这两个问题都是选后面的啦!这样我们就知道了学生属于“物品”,学校属于“抽屉”了。接下来就可以算680÷365了。等等,我问大家,到这里完了没有?还没完,∵一年可能有366天的也有365天的,被4整除的年份有366天,其余情况全是365天(如表格所示)。为什么题目后面括上“都

在3220年出生”呢?∵这一年有多少天需要通过除以4判断该年有多少天。3220÷4=805,∴3220年有366天。接下来就可以进一步得到680÷366=1……314,1+314=315(名)。答:至少有315名同学的生日是在同一天。
备注:我们也可以通过画图来知道,有多少名同学的生日在同一天,有多少名学生的生日在同一天:

2、已知有3个桶里均装着20元钱,7个桶里均装着1个水袋,6个桶里全是空的,5个桶里均装1张写着“奶油”的纸条。问:玲玲要从这些桶里抽东西,至少要抽到第几个桶后才一定能抽到20元钱?
分析:这是一道另类的抽屉原理题目,像这类题型,核心就在于要考虑最差因素。如果我第一次就抽到20元钱,那说明我很幸运,但这种情况在实际上绝对会发生吗?当然不会,况且这种情况发生的概率最小了。那么这样就不难得知,我每次总抽不到20元钱就是最差因素,不过我不管每次抽到什么,抽完水袋、纸条以及6次“抽空”之后,我一定能抽到20元钱。7+6+5+1=19(个)答:至少要抽到第19个桶后才一定能抽到20元钱。
三、流程图与探究
1、现在如果我把例1变一下形,那么求解该题的流程图又该怎么画,该怎么解读呢?:一共有43个小球,8个箱子,把这些小球平均放到所有箱子里,则至少有1个箱子里会有 个小球。
虽然已知条件变了,但题型并没有变,仍然是抽屉原理的概念,那么我们直接套公式就可以了。

首先程序开始,询问并回答小球的数量(物品数),然后询问并回答箱子的数量(抽屉数),再判断是否小球的数量>箱子的数量,若“否”则停止脚本,否则接着判断小球的数量÷箱子的数量的余数是否=0,若“是”则接下来将小球的平均数量设为:小球的数量÷箱子的数量,否则将小球的平均数量设为:(小球的数量÷箱子的数量)+1向下取整。如果上一部执行小球的数量÷箱子的数量,则下一步执行说:“把小球的数量个小球放到箱子里,则每个箱子里有小球的平均数量”,否则说:“把这些小球放到箱子里,则至少有1个箱子里会有小球的平均数量个小球”。最后程序结束。
2、例2也是同样变一下形,这道题求解的流程图又该怎么画呢,该怎么解读呢?:已知有10杯奶茶,7杯果汁,6杯可乐,4杯汽水。问:至少取出多少杯饮品,才能保证至少有一杯饮品是果汁?

首先程序开始,分别询问奶茶有多少杯?果汁有多少杯?可乐有多少杯?汽水有多少杯?这4个问题的回答分别对应于变量“奶茶的数量”、“果汁的数量”、“可乐的数量”、“汽水的数量”。并把这4个变量赋值给1、2、3、4,然后从这个数中选出1赋值给变量“饮品的总数”。接下来求可乐的数量+奶茶的数量+汽水的数量+1,作为饮品的总数变量值。最后说:“至少取出饮品的总数杯饮品才能保证至少有一杯饮品是果汁。”
四、变量信息
1、运行角色1的脚本要用到的变量:小球的数量、箱子的数量、小球的平均数量
2、运行角色“→”的脚本要用到的变量:奶茶的数量、果汁的数量、可乐的数量、汽水的数量、饮品的总数

五、代码讲解
在这里我会用原作品数据,并带上图片作为内容讲解,这样理解起来就会变得相对直观了。
当绿旗被点击 (0)
(1)——(4):∵解决抽屉原理问题时“首要任务”就是要构造抽屉。构造的过程是什么样子的呢?这就要对小球和箱子数进行询问并回答了。
询问一共有多少个小球? (1)
将小球的数量设为回答 (2)
询问一共有多少个箱子? (3)
将箱子的数量设为回答 (4)
(5):只有小球数比箱子数多才符合题意,符合题意才有必要执行后面的程序,∴要用到如果否则模块。
如果小球的数量>箱子的数量那么 (5)←外层的如果
(6)——(13):根据元素数÷抽屉数=单个抽屉的元素数可知,若没有余数,则恰好平分,若余1,则意味着多出来的1个元素必然会多分到一个抽屉里,就有了单个抽屉的元素数+1的概念。情况不同答案不同,对应的答语也就不同。∴要用到如果否则模块。
如果小球的数量除以箱子的数量的余数=0那么 (6)←内层的如果
将小球的数量设为:小球的数量÷箱子的数量 (7)
说:“连接(4个连接)把和小球的数量和个小球放到箱子里,则每个箱子里有和小球的平均数量和个小球” (8)
否则 (9)←内层的否则
将小球的数量设为:小球的数量÷箱子的数量向下取整 (10)
说:“连接连接把这些小球放到箱子里,则至少有1个箱子会有和小球的平均数量和个小球” (11)
否则 (12)←外层的否则
停止脚本 (13)

2、接下来我在讲解角色“→”的代码
当绿旗被点击
询问奶茶有多少杯?
将奶茶的数量设为回答
询问果汁有多少杯?
将果汁的数量设为回答
询问可乐有多少杯?
将可乐的数量设为回答
询问汽水有多少杯?
将汽水的数量设为回答
抽屉原理属于思维题,思维题是活的,∴要体现出来问的灵活,如果把所有变量都列举出来会显得死板,代码也长,∴要提取出他们的共同点:都属于“饮品”,这样不但灵活,而且还缩短代码了。
询问你想抽到什么饮品?

由于奶茶、果汁、可乐、汽水的数量是各自独立的,但提取出来“饮品”后它们又是一个整体。为了不改变题意,只能分类讨论了。∴要用到4个如果模块来根据判断条件来分别求最差因素的结果。
如果回答=1那么
将饮品的总数设为:可乐的数量+奶茶的数量+汽水的数量+1
说:“连接连接至少取出和饮品的总数和杯饮品,才能保证至少有一杯饮品是果汁”
如果回答=2那么
将饮品的总数设为:果汁的数量+奶茶的数量+汽水的数量+1
说:“连接连接至少取出和饮品的总数和杯饮品,才能保证至少有一杯饮品是可乐”
如果回答=3那么
将饮品的总数设为:可乐的数量+果汁的数量+汽水的数量+1
说:“连接连接至少取出和饮品的总数和杯饮品,才能保证至少有一杯饮品是奶茶”
如果回答=4那么
将饮品的总数设为:可乐的数量+奶茶的数量+果汁的数量+1
说:“连接连接至少取出和饮品的总数和杯饮品,才能保证至少有一杯饮品是汽水”
