Scratch与数学的整合13
第13课 邻座问题
一、预学提示
相信大家现在已经熟悉掌握了奇数偶数的排列规律和行、列的概念了。但是你是否发现到,自己教室里你与每个学生之间的座位有着某种联系呢?在这节课里,用Scratch编写“邻座问题”的程序的方法,就是我们今天要探究的问题。
二、问题探究
1、“邻座”我们可以理解为:“相邻两个空座位”或“相邻两个有人的座位”(前后左右都算)。那么问题来了:一共有16个座位,每位学生均只能坐一个座位,那么有没有一种方法,使整个教室的每两个座位之间都没有邻座呢?
我们可以尝试画一下图(见图1)。∵邻座

图1
的情况前后左右都算,∴应该从极端情况考虑,根号16=4,即教师的座位应该是4行×4列。要想实现整个教室的每两个座位之间都没有“邻座”,就应该每行每列都两人隔一个座位坐,只要有公共的一行一列能实现,并对角线上的每个座位都有人,那么整个问题就解决了。
2、那么如果有25个座位,每位学生均只坐一个座位,还有实现的可能吗?
我们再尝试画一下图。这道题和上道题的道理一样,仍然是一个邻座问题,根号25=5,即教室的座位应该是5行×5列,由于5÷2=2……1,2+1=3,∴极端的情况有两种:一种是四角都有人坐(图2所示),另一种是四角都是空座(图3所示),但无论哪种,都遵循“不能实现

图2

图3
邻座”的原则。∵可以这样想:设每行每列均有a个座位有人,b个座位没人,那么有a+b=b+a,前提是必须整个教室的所有坐人与没做人的座位前后左右错开。
三、流程图

图4
首先程序开始。向角色提问:“教室有多少行?”通过你输入的数字回答。如果大于3,那么将座位数设为行数×行数。该结果除以2如果有余数则程序说明不能实现邻座,程序停止运行,否则说明不能实现邻座。接下来询问四角是否安排座位?若回答“是”则将有人的座位(整个教室)=有人的座位(每行每列)个+1,否则将 有人的座位(整个教室)=有人的座位(每行每列)-1。无论哪种结果,都继续说答语。最后程序结束。
四、变量信息
行数、列数、座位数、邻座数、有人的座位

五、代码示例
当绿旗被点击(0)
(1)——(2):开始对座位的行数进行输入并回答。
询问座位有多少行? (2)
将行数设为回答 (3)
(4):对回答是否>3进行判断。是整串代码的如果判断。
如果回答>3那么 (4)
(5)——(6):接下来考虑极端情况,即行数×列数(行列相等)。
将列数设为行数 (5)
将座位数设为行数×列数 (6)
接下来通过求座位数÷2的余数来判断是否能实现邻座。其中(7)——(11)是内层的如果的的前半部分。(12)——(16)是内层的如果的中间部分。(17)——(21)是内层的如果的后半部分。
如果座位数除以2的余数=0那么 (7)
将邻座数设为座位数÷2 (8)
说:“连接连接不能实现邻座,有和邻座数和个邻座” (9)
否则 (10)
询问四角上是否都安排邻座? (11)
如果回答包含是那么 (12)
将有人的座位设为|有人的座位|+1 (13)
将邻座数设为不能实现 (14)
等待1秒 (15)
说:“连接连接不能实现邻座,座位多出来一人,即和有人的座位+1和个” (16)
如果回答包含否那么 (17)
将有人的座位设为|有人的座位|-1 (18)
将邻座数设为不能实现 (19)
等待1秒 (20)
说:“连接连接不能实现邻座,座位缺少了一人,即和有人的座位-1和个” (21)

六、拓展延伸
邻座原理与抽屉原理有一定联系。抽屉原理可以理解为:把一些物品放进抽屉里,无论怎样放,总有一个物品能放进任意一个抽屉里。若有m个物品,n个抽屉,那么当m是偶数时,m÷n的结果是每个抽屉里均有的物品数量,而m是奇数时,余下的1恰好是一定会放进任意一个抽屉里的物品(m>n)。如果把一个教室内一行的格数看成抽屉数量,若有人座位数÷2有余数,则余下的那一个有人的座位,必会有可能让每人互不相邻,若没有余数则只能是与人错开。而整个教室四角有人=座位数÷2+1证明如下:我们假设把所有人看成一个整体,把它们放到一边上去,假设每人占教室面积相等,那么教室面积÷2再向上取整恰好是所有人占教室的面积。这个推理不仅局限于行、列数都相等的情况。