内容正文:
第六章 计数原理
6.1分类加法计数原理与分步乘法计数原理
(第三课时)
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
学习目标
1.进一步理解并掌握两个计数原理;
2.能根据具体问题使用“分类”或“分步”
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
一 复习引入
两个计数原理分别是什么?
各自特点是什么?
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
二 讲授 新课
例7 计算机编程人员在编好程序之后需要对程序进行测试,需要知道有多少执行路径。一般地,一个程序有许多子模块组成。
(1)下图有多少条执行路径?
(2)为了减少测试时间,
程序员需要设法减少测试次数,
怎样设计一个测试方式,
以减少测试次数呢?
分析:要完成的一件事是:
“确定程序执行的路径”
开始
子模块1
18条执行路径
子模块3
28条执行路径
子模块2
45条执行路径
子模块5
43条执行路径
子模块4
38条执行路径
结束
A
整个模块的任意一条执行路径都分两步完成:
第1步是从开始执行到A点;
第2步是从A点执行到结束.而第1步可由子模块1、子模块2、子模块3中任何一个来完成,分别有18、45、28个不同的方法;第2步可由子模块4、子模块5中任何一个来完成,分别有38、43个不同的方法.因此,分析一条指令在整个模块的执行路径需要用到两个计数原理来完成.
解:(1)由分类加法计数原理,子模块1、子模块2、子模块3中的子路径条数共为18+45+28=91条;
子模块4、子模块5中的子路径条数共为38+43=81条;
由分步乘法计数原理,整个模块的执行路径条数共为:91 x 81 = 7371条
(2)可以先分别单独测试5个模块,以考察每个子模块的工作是否正常.总共需要的测试次数为:18+45+28+38+43=172.
再测试各个模块之间的信息交流是否正常,需要测试的次数为:3 x 2 = 6.
每个子模块都正常工作,并且各个子模块之间的信息交流也正常,那么整个程序模块就工作正常了.
测试整个模块的次数就变为: 172+6=178
这不意谓着否定计数原理,而是从另一个角度解决实际问题,两者并不矛盾。
例8 通常,我国民用汽车号牌的编码由两部分组成:第一部分为由汉字表示的省、自治区、直辖市简称和用英文字母表示的发牌机关代码,第二部分为由阿拉伯数字和英文字母组成的序号.
其中,序号的编码规则为:
(1)由10个阿拉伯数字和除O、I之外的24个英文字母组成;
(2)最多只能有2个英文字母.如果某地级市发牌机关采用5位序号编码,那么这个发牌机关最多能发放多
少张汽车号牌?
分析:要完成的一件事:
“确定汽车号牌编号”
由编号组成可知,序号的个数决定了这个发牌机关所能发放的最多号牌数.根据序号编码规则,每个序号中
的数字、字母都是可以重复的。可以将序号分为三类:没有字母;有一个字母;有两个字母。以字母所在的位置为分类标准,将有一个字母的序号分为5个子类;将有二个字母的序号分为10个子类.
解:由号牌编号的组成可知,这个发牌机关所能发放的最多号牌数就是序号的个数.根据序号编码规则,5位序号可以分为三类:没有字母,有1个字母,有2个字母.(1)当没有字母时,序号的每一位都是数字.确定一个序号可以分5个步骤,每一步都可以从10个数字中选1个,各有10种选法.根据分步乘法计数原理,这类号牌张数为:10 x 10 x 10 x 10 x 10 = 10000.
(2)当有1个字母时,这个字母可以分别在序号的第1位、第2位、第3位、第4位或第5位,这类序号可以分为五个子类.当第1位是字母时,分5个步骤确定一个序号中的字母和数字:第1步,从24个字母中选1个放在第1位,有24种选法;第2~5步都是从10个数字中选1个放在相应的位置,各有10种选法.根据分步乘法计数原理,号牌张数为:24 x 10 x 10 x 10 x10 = 240000.
同样,其余四个子类号牌也各有240000张.
根据分类加法计数原理,这类号牌张数一共为:
240000 + 240000 + 240000 + 240000 + 240000 = 1200000.
(3)当有2个字母时,根据这2个字母在序号中的位置,可以将这类序号分为十个子类:第1位和第2位,第1位和第3位,第1位和第4位,第1位和第5位;
第2位和第3位,第2位和第4位,第2位和第5位;
第3位和第4位,第3位和第5位;第4位和第5位。
当第1位和第2位是字母时,分5个步骤确定一个序号中的字母和数字:第1~2步都是从24个字母中选1个分别放在第1位、第2位,各有24种选法;第3~5步都是从10个数字中选1个放在相应的位置,各有10种选法,根据分步乘法计数原理,