Scratch与数学的整合2
第2课 有多少种分法
一、课程导入
本节课,你将会学到:什么是列举?怎样列举、计算所有可能?如何用Scratch实现“有多少种不同的分法”的程序?
二、想想议议
1、在学习开始时,我们先要了解一下什么是列举。“列举” 这词我们怎么把他下个定义呢?或许这样理解起来会比较简单:我们把这两个字拆开来看 。“列”怎么理解?那么“举”又怎么理解?有的同学说:“‘列’是‘列出’。”还有的同学说:“‘举’是‘举起来’。”,那我就想知道,在“列出举起来”中哪些字是多余的呢?从读起来是否通畅来看,就可以知道答案是“列出”。但此事我要提醒大家,我们这节课里面还会提到“所有可能”呢!
2、由此我们可以定义:所谓列举,就是列举出所有可能。在平时,列举要做到不重不漏。在概率题中,我们经常会碰到问:“有多少种发生的可能?”同时概率又是一个衡量事件可能发生的大小的一个值。所以它必然会有指定的算法。
3、我们先来看一道例题:
把一些书分给学生一些学生,每人只能分到一本书。问:有多少种不同的分法?
解析:由于题目中没有明确给出书和学生的数量,∴我们无法直接通过列举来计算所有可能。那么我们不妨把学生的数量看成一个整体,每一本书均看成一个个体,一个一个的排除。通过画图得到指定的公式(如图1所示):用“○”表示已有的书,“∅”表示被排除掉的书:
学生1:○○○○……○○
学生2:○○○○……○∅
学生3:○○○○……∅∅
以此类推:……
学生(n-1):○○
学生n:○∅
图1
在上节课我们学过,字母可以表示任意数,代数式中就含有字母,那么“学生n”中的“n”就是一个代数式。可我要想用含有字母的式子表示这些学生的名称,我到底该怎么办呢?这位同学想的好。把学生n看成最后一个学生。在解决排队问题时,问到“××的前面一个人是从左往右数第几位”时,就用这个人的序数减1,那么学生n的前面不就是学生(n-1)吗?
另外我们还发现,所有数全被学生1分到,每往后面一个学生被分到的书的本数就减少1,最后学生n只被分到了1本书。那么最终答案就是有1+2+3+……+n(种)不同的分法。
三、流程图讲解

图2
首先程序开始。向角色提问:“把一些书分给大家,有多少种不同的分法?”(说法不唯一)。然后新建(全局)变量:书的本数、第一个数、最后一个数、倒数第二个数、书的分法。给最后一个分到的数命名为n,这个可能是奇数也可能是偶数,所以先不要固定最大值,再将第一个人分到的数量令它为1。为了方便,可以把1放到最后的算式里。接下来判断它是否被2整除。若能被2整除,则选用(1+n)×(n÷2)的公式,否则选用[1+(n+1)]×[(n+1)]÷2]-(n+1)的公式。最后让角色说:“有××种不同的分法。”这地方就算是答语了。最后程序结束。
四、代码示例
首先程序准备运行。
当绿旗被点击
我这里以问“把多少本书分给大家”为例进行提问。
询问把多少本书分给大家?
将书的本数设为回答
这是书有多少本已经明确出来了,但是到第有多少种分法呢?还要通过将总本数除以2,来判段计算最终的结果到底选用那个公式。
如果书的本数除以2的余数=0那么
将第一个数设为1
将最后一个数设为回答
将书的分法设为(第一个数+最后一个数)×(最后一个数÷2)
说连接书的分法有和书的分法种
否则
将第一个数设为1
将倒数第二个数设为回答-1
设为回答-1了,就意味着总数是奇数,不能与2全部配对,需要把最后一个数单独拿出来算,这样就有了“最后一个数-1=倒数第二个数”。为了简洁,我们把它进行了如下拆分:
将书的分法设为[(第一个数+倒数第二个数)]×(最后一个数-1)
说连接书的分法有和书的分法种
五、课后延伸
1、既然有不同的分法,那么当然也就有相同的分发,虽然“不”与“相”只有一字之差,但解题方法上却有一定大的不同。请课后大家尝试去探索。
2、解决了第1问之后,请大家想一下,如果要是执行相同的分发的脚本,还有可能实现吗?理由又是什么呢?