枚举法
计算机常用算法

练习: 假设有一堆小石子,二人轮流去取,谁拿走最后一颗石子便输。 先让甲规定石子总数N以及每次最多取多少颗数k(n>=2*k+1), 甲每次取a颗, (N,k,a均为随机数),乙怎样取赢的可能性最大? 设甲为计算机产生的随机数,乙为由你编的计算机程序。
贪心法是从问题的某一个初始解出发,向给定的目标推进.
数学函数式递归 例1、阶乘n!=1*2*3*…(n-1)*n
[算法分析]:要求n!,只需求出(n-1)!,因为n!=n*(n-1)!,要求出(n-1)!, 只需求出(n-2)!,因为(n-1)!=(n-1)*(n-2)!,所以可得到阶乘的递归定 义式:
n!=
{
n*(n-1)!,n>0; 1, n=0。
模拟法: 就是模拟某个过程,通过改变数学的各种参数,进而观察变更这 些参数所引起过程状态的变化.一般题目给定或者隐含某一概率.设 计者利用随机函数和取整函数设定某一范围的随机值,将符合概率 的随机值作为参数.然后根据这一模拟的数学模型展开算法. 模拟策略的关键: 是如何按照概率的要求确定随机值的范围.这个随机值设计得好, 模拟效果就好.
找零钱问题:一个小孩买了价值为33美分的糖,并将1 找零钱问题:一个小孩买了价值为33美分的糖,并将1美元 33美分的糖 的钱交给售货员。售货员希望用数目最少的硬币找给小孩。 的钱交给售货员。售货员希望用数目最少的硬币找给小孩。 假设提供了数目不限的面值为25美分、10美分 25美分 美分、 美分、 假设提供了数目不限的面值为25美分、10美分、5美分、及1 美分的硬币。 求解所用方法即为贪心算法) 美分的硬币。(求解所用方法即为贪心算法)
5 7 6
பைடு நூலகம்
本题目有9个格子,要求填数,如果不考虑问题给出的条件, 共有9!=362880种方案,在这些方案中符合条件的即为解。因 此可以用枚举法。
枚举法

枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。
能使命题成立者,即为问题的解。
采用枚举算法解题的基本思路:(1)确定枚举对象、枚举范围和判定条件;(2)一一枚举可能的解,验证是否是问题的解下面我们就从枚举算法的的优化、枚举对象的选择以及判定条件的确定,这三个方面来探讨如何用枚举法解题。
枚举算法应用例1:百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。
到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。
现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。
下面是解这个百鸡问题的程序var x,y,z:integer;beginfor x:=0 to 100 dofor y:=0 to 100 dofor z:=0 to 100 do{枚举所有可能的解}if (x+y+z=100)and(x*3+y*2+z div 3=100)and(z mod 3=0)then writeln('x=',x,'y=',y,'z=',z); {验证可能的解,并输出符合题目要求的解} end.上面的条件还有优化的空间,三种鸡的和是固定的,我们只要枚举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了枚举范围,请看下面的程序:var x,y,z:integer;beginfor x:=0 to 100 dofor y:=0 to 100-x dobeginz:=100-x-y;if (x*3+y*2+z div 3=100)and(z mod 3=0)thenwriteln('x=',x,'y=',y,'z=',z);end;end.未经优化的程序循环了1013次,时间复杂度为O(n3);优化后的程序只循环了(102*101/2)次,时间复杂度为O(n2)。
8算法策略之枚举法

8算法策略之枚举法蛮⼒法蛮⼒法是基于计算机运算速度快这⼀特性,在解决问题时采取的⼀种“懒惰”的策略。
这种策略不经过(或者说是经过很少的)思考,把问题的所有情况或所有过程交给计算机去⼀⼀尝试,从中找出问题的解。
蛮⼒策略的应⽤很⼴,具体表现形式各异,数据结构课程中学习的:选择排序、冒泡排序、插⼊排序、顺序查找、朴素的字符串匹配等,都是蛮⼒策略具体应⽤。
⽐较常⽤还有枚举法、盲⽬搜索算法等。
枚举法枚举( enumerate)法(穷举法)是蛮⼒策略的⼀种表现形式,也是⼀种使⽤⾮常普遍的思维⽅法。
它是根据问题中的条件将可能的情况⼀⼀列举出来,逐⼀尝试从中找出满⾜问题条件的解。
但有时⼀⼀列举出的情况数⽬很⼤,如果超过了我们所能忍受的范围,则需要进⼀步考虑,排除⼀些明显不合理的情况,尽可能减少问题可能解的列举数⽬。
⽤枚举法解决问题,通常可以从两个⽅⾯进⾏算法设计:1)找出枚举范围:分析问题所涉及的各种情况。
2)找出约束条件:分析问题的解需要满⾜的条件,并⽤逻辑表达式表⽰。
【例1】百钱百鸡问题。
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁⼀,值钱五;鸡母⼀,值钱三;鸡雏三,值钱⼀;百钱买百鸡,翁、母、雏各⼏何?算法设计1:通过对问题的理解,读者可能会想到列出两个三元⼀次⽅程,去解这个不定解⽅程,就能找出问题的解。
这确实是⼀种办法,但这⾥我们要⽤“懒惰”的枚举策略进⾏算法设计:设x,y,z分别为公鸡、母鸡、⼩鸡的数量。
尝试范围:由题意给定共100钱要买百鸡,若全买公鸡最多买100/5=20只,显然x的取值范围1~20之间;同理,y的取值范围在1~33之间,z的取值范围在1~100之间。
约束条件: x+y+z=100 且 5*x+3*y+z/3=100算法1如下:main( ){ int x,y,z;for(x=1;x<=20;x=x+1)for(y=1;y<=34;y=y+1)for(z=1;z<=100;z=z+1)if(100=x+y+z and 100=5*x+3*y+z/3){print("the cock number is",x);print("the hen number is", y);print("the chick number is“,z);}}算法分析:以上算法需要枚举尝试20*34*100=68000次。
枚举法

枚举法在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法.枚举法是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。
这两种类型经常(但不总是)重叠。
特点将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。
例如:找出1到100之间的素数。
需要将1到100之间的所有整数进行判断。
枚举算法因为要列举问题的所有可能的答案,所有它具备以下几个特点:1、得到的结果肯定是正确的;2、可能做了很多的无用功,浪费了宝贵的时间,效率低下。
3、通常会涉及到求极值(如最大,最小,最重等)。
4、数据量大的话,可能会造成时间崩溃。
结构枚举算法的一般结构:while循环。
首先考虑一个问题:将1到100之间的所有整数转换为二进制数表示。
算法一:for i:=1 to 100 do begin将i转换为二进制,采用不断除以2,余数即为转换为2进制以后的结果。
一直除商为0为止。
end;算法二:二进制加法,此时需要数组来帮忙。
program p;var a:array[1..100] of integer; {用于保存转换后的二进制结果} i,j,k:integer;beginfillchar(a,sizeof(a),0); {100个数组元素全部初始化为0}for i:=1 to 100 do begink:=100;while a[k]=1 do dec(k); {找高位第一个为0的位置}a[k]:=1; {找到了立刻赋值为1}for j:=k+1 to 100 do a[j]:=0; {它后面的低位全部赋值为0}k:=1;while a[k]=0 do inc(k); {从最高位开始找不为0的位置}write('(',i,')2=');for j:=k to 100 do write(a[j]); {输出转换以后的结果}writeln;end;end.枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。
枚举法的四种方法

枚举法的四种方法
枚举法是一种通过一一列举所有可能的情况来解决问题的方法。
以下是四种常用的枚举方法:
1. 穷举法:这是最直接、最基础的一种枚举方法,它简单地将问题中所有可能的答案一一列举出来,然后根据题目要求进行筛选。
2. 递增枚举:对于那些没有明确范围限制的问题,我们可以从某个起点开始,试探性地增加一个量,然后对每个量进行操作与判别,如果满足条件,则输出结果。
3. 二进制枚举:在二进制加法中,需要用到数组来帮忙。
具体操作是将1置为1,然后从最高位开始找不为0的位置。
4. 基于约束条件的枚举:在枚举过程中,可以根据问题的具体要求确定筛选条件,然后根据筛选条件进行枚举。
以上就是四种常用的枚举方法,每种方法都有其适用范围和特点,应根据具体情况选择使用。
枚举法

输出数据: 输出文件是OUTPUT.TXT。文件只有一行,是一个整数,表示你的程 序找到的最佳游览线路的总分值。
输入输出示例: INPUT.TXT 3 6 -50 –47 36 –30 –23 17 –19 –34 –13 –8 -42 –3 –43 34 –45
OUTPUT.TXT 84
东北师大附中
东北师大附中
分析:实际上,只要知道乘数和被乘 数就可以写出乘法算式,所以我们可 以枚举乘数与被乘数的每一位。然后 再判断是不是满足条件即可。计算量 是45=1024,对于计算机来说,计算量 非常小。
东北师大附中
例4 时钟问题(IOI94-4)
九种时钟状态
东北师大附中
输入数据: 读9个数码,这些数码给出了9个时钟时针的初始位置。数 码与时刻的对应关系为: 0——12点 1——3点 2——6点 3——9点 图中的例子对应下列输入数据: 330 222 212 输出数据: 输出一个最短的移动序列(数字序列),该序列要使所 有的时钟指针指向12点,若有等价的多个解,仅需给出其 中一个. 东北师大附中
6
7 8 9
3、5、6、9
4、7、8 5、7、8、9 6、8、9
C6=(P3+P5+P6+P9) % 4
C7=(P4+P7+P8) % 4 C8=(P5+P7+P8+P9) % 4 C9=(P6+P8+P9) % 4
东北师大附中
设计算法
因此我们可以设计如下枚举算法(伪代码):
for p1 <- 0 for p2 <... ... for p9
东北师大附中
2 例1 巧妙填数
将1~9这九个数字填入九个空格中。 每一横行的三个数字组成一个三位数。 如果要使第二行的三位数是第一行的 两倍, 第三行的三位数是第一行的三 倍, 应怎样填数。(一共4组解,一组 如下图)
基础算法(一)枚举法

基础算法(一)枚举(穷举)法无论什么类型的试题,只要能归纳出数学模型,我们尽量用解析方法求解,因为一个好的数学模型建立了客观事物间准确的运算关系。
在一时找不出解决问题的更好途径时,可以根据问题中的约束条件,将所有可能的解全部列举出来,然后逐一验证是否符合整个问题的求解要求。
一、枚举法的基本思想:从可能的解集合中一一穷举各元素,用题目给定的检验条件判定哪些是有用的,哪些是无用的,能使命题成立的,即为其解。
这种思维方法主要是基于计算机运算速度快的特点。
二、枚举法解题思路:1、对命题建立正确的数学模型;2、根据命题确定数学模型中各变量的变化范围(即可能解的范围);3、利用循环语句、条件判断语句逐步求解或证明。
三、枚举法的特点:算法简单,但运算量大。
对于可能确定解的范围,又一时找不到更好的算法时,可以采用枚举法。
1、求满足表达式A+B=C的所有整数解,其中A、B、C为1~3之间的整数。
2、鸡兔同笼问题(在同一个笼子里有鸡和兔子若干只,从上面看,能看到20个头,从下面看,能看到60只脚,问鸡兔各有多少只?)3、百钱百鸡问题(一百块钱要买一百只鸡,这一百只鸡必须包含母鸡、公鸡和小鸡,其中,公鸡5元一只,母鸡3元一只,小鸡1元三只,问有哪些购买方案?)4、水仙花数问题(ABC=A3+B3+C3,列出所有的整数ABC)5、一根29厘米长的尺子,只允许在上面刻7个刻度,要能用它量出1~29厘米的各种长度,试问刻度应该怎样选择?6、猴子选大王:有M个猴子围成一圈,每个有一个编号,编号从1到M。
打算从中选出一个大王。
经过协商,决定选大王的规则如下:从第一个开始,每隔N个,数到的猴子出圈,最后剩下来的就是大王。
要求:从键盘输入M,N,编程计算哪一个编号的猴子成为大王。
参考程序:7、变形猴子选大王:有M个人围成一圈,每人有一个编号,从编号为1的人开始,每隔N个出圈,按出圈次序排成一列,其编号刚好按顺序从1到M。
要求:从键盘输入M,N,编程计算并输出这M个人原来在圈中的位置。
简述枚举法的概念。

简述枚举法的概念。
枚举法是一种解决问题的方法,通过对所有可能的情况进行逐一分析,从而找到合适的解决方案。
它在各个领域都有广泛的应用,尤其是在计算机科学和工程领域。
一、枚举法概念介绍枚举法,顾名思义,就是逐一列举所有可能的情况进行分析。
这种方法通常适用于问题具有明确条件,且需要寻找唯一解的情况。
通过逐个尝试所有可能的解决方案,直到找到符合条件的最优解。
二、枚举法的应用场景1.计算机算法:在计算机领域,枚举法常常用于解决诸如排列组合、最短路径等问题。
如在解决八皇后问题中,通过枚举法尝试所有可能的棋盘布局,直到找到满足条件的布局。
2.工程领域:在工程设计中,枚举法也有广泛应用。
如在设计通信系统时,可以通过枚举所有可能的信号传输方式,找到最合适的传输方案。
3.数学问题:在数学中,枚举法可以帮助解决一些复杂的问题。
例如,通过枚举所有可能的数列规律,可以找到符合给定条件的数列。
三、枚举法的实际案例以著名的旅行商问题(TSP问题)为例,假设有一个城市地图,每个城市之间都有距离。
枚举法的解决思路是:1.初始化一个访问列表,标记所有已访问的城市;2.从未访问的城市中选取一个距离最近的城市;3.遍历所有城市对,计算当前城市与未访问城市的距离和;4.更新访问列表,并将新城市标记为已访问;5.重复步骤2-4,直到访问完所有城市。
通过这种枚举所有可能路径的方法,可以找到最短的旅行路线。
四、枚举法的优势与局限性优势:1.适用范围广泛,解决问题直观易懂;2.对于某些问题,枚举法能较快找到最优解;3.算法实现简单,易于理解。
局限性:1.效率较低,特别是在大数据量情况下;2.容易陷入局部最优解,无法保证找到全局最优解;3.无法应对问题条件的复杂变化。
五、总结枚举法作为一种解决问题的方法,在一定范围内具有较高的实用价值。
然而,随着问题规模的扩大,枚举法的效率逐渐降低,甚至无法应对。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 4、妈妈买了14个梨,打算把他们分成 堆,每堆 、妈妈买了 个梨 打算把他们分成3堆 个梨, 至少有3个梨 请问:一共有多少种分法? 个梨, 至少有 个梨,请问:一共有多少种分法? • 分析:先看有无次序,分成3堆,没说分给谁, 3+4+7,4+7+3,7+4+3是没有分别的,都是一堆是3 个,一堆是4个,一堆是7个,可以表示为 (3,4,7);再确定范围,至少有3个,一共有14 个,则最多有8个。 • 解:根具题意进行分配,一共有以下几种分法 (3,3,8)(3,4,7)(3,5,6)(4,4,6)(4,5,5) 答:根据题意一共有5种分法。
汤姆有5颗,即首位为5,则有以下2种情况 512,521 汤姆有6颗,即首位为6,则有以下1种情况 611 则一共有1+2+3+4+5+6=21种情况。
• 有次序之分 有次序之分:上面两道例题都强调了不同 位置地数代表不同的顺序含义,即有次序 之分。 • 无次序之分:有些情况下,我们并不强调 无次序之分: 不同位置上的数代表不同的顺序含义,即 无次序之分。 请看下面两道例题
当第一位为2时,则有以下2种情况 (2,1,6)(2,2,5)(2,3,4)(2,4,3)(2,5,2) (2,6,1)(2,7,x ) 当第一位为3时,则有以下1种情况 (3,1,5)(3,2,4)(3,3,3)(3,4,2)(3(3,6, x) 当第一位为4时,则有0种情况 (4,1,4)(4,2,3)(4,3,2)(4,4,1)(4,5,x) 当第一位为5时,则有0种情况 (5,1,3)(5,2,2)(5,3,1)(5,4,x) …… 以此类推下去,发现都是重复的,所以一共有 4+2+1=7(种)情况
• 例题3:老师让小明写出3个非零自然数,且3个 数的和是9,如果数相同,顺序不同算同一种写法, 例如1+2+6,2+1+6,6+1+2都算是同一种写法,那 么小明一共有多少种不同的写法? • 分析: 1+2+6,2+1+6,6+1+2这三种都算是同一种 写法,我们将它们记作(1,2,6)。非零的自然数, 说明最小为1,最大为7。 • 为了思路顺畅,方便解题,我们可以先假设是有 次序的,然后再去掉重复的 • 当第一位为1时,有以下4种情况 (1,2,6)(1,3,5)(1,4,4)(1,5,3)(1,6,有一个三位数的各位数字都不是 ,且 有一个三位数的各位数字都不是0,
各位数字之和是6,这样的三位数共有多少个? 各位数字之和是 ,这样的三位数共有多少个?
• 分析:从首位开始,依照从小到大的顺序依次来 枚举出每一位。 首位不能为0,最小为1,最大为4。想一想为什么 不能是5,不能是6?
当第一堆有3只,则有以下2种情况 (3,2,7)(3,3,6)(3,4,5)(3,5,4)(3,6,3)(3,7,2) 当第一堆有4只,则有以下1种情况 (4,2,6)(4,3,5)(4,4,4)(4,5,3)(4,6,2) 当第一堆有5只,则有0种情况 (5,2,5)(5,3,4)(5,4,3)(5,5,2) 当第一堆有6只,则有0种情况 (6,2,4)(6,3,3)(6,4,2) 当第一堆有7只,则有0种情况 (7,2,4)(7,3,2) 当第一堆有8只,则有0种情况 (8,2,2) 则一共有4+2+1=7(种)情况
• 例题4:生物老师让大家观察蚂蚁的习性,第二天小悦就 在小区的广场上发现了12只黑蚂蚁,这12只蚂蚁恰好凑成 了3堆,每堆至少有2只,请问:这3堆蚂蚁的只数有多少 种可能? • 分析:在3堆蚂蚁中,每堆至少有2只,一共有12只,因此 每堆蚂蚁至少有2只,至多有8只。同样为了方便解题,我 们先假设是有次序的,然后再去掉重复的。 第一堆有2堆,则有以下4种情况 (2,2,8)(2,3,7)(2,4,6)(2,5,5)(2,6,4)(2,7,3) (2,8,2)
汤姆有1颗,即首位为1,有以下6种情况 116,125,134,143, 152,161. 汤姆有2颗,即首位为2,有以下5种情况 215,224,233,242,251. 汤姆有3颗,即首位为3,有以下4种情况 314,323,332,341. 汤姆有4颗,即首位为4,有以下3种情况 413,422,431
练习题
• 1、有一些三位数的各位数字都不是0,且各位数 、有一些三位数的各位数字都不是 , 字之和为7,这样的3位数有多少个 位数有多少个? 字之和为 ,这样的 位数有多少个? • 分析:先看有无次序之分,因为是一个三位数, 有个位、十位、百位之分,所以是有次序的,再 确定范围,各位数字都不为0,各位数字之后为7, 所以最小为1,最大为5,则应用字典排列法解题 如下。 • 解:当首位为1时,有以下5种情况 115,124,133,142,151 当首位为2时,有以下4种情况 214,223,232,241
当首位为3时,有以下3种情况 313,322,331 当首位为4时,有以下2种情况 411,421 当首位为5时,有以下1种情况 511 5+4+3+2+1=15(个) 答:这样的三位数共有15个
• 2、费叔叔买来 个苹果,分给小悦、东东、 费叔叔买来6个苹果 分给小悦、东东、 费叔叔买来 个苹果, 阿奇三个人,每人至少一个, 阿奇三个人,每人至少一个,那么一共至 少有多少种分法。 少有多少种分法。 • 分析:先确定是否有次序,题目中告诉了 我们三个人的名字,说明是有次序的;再 确定范围,每人至少一个,所以最小是1, 最大是4.
• 3:张奶奶从超市里买了10包果冻,分别装在 个 :张奶奶从超市里买了 包果冻 分别装在3个 包果冻, 塑料袋里,每袋至少一包, 塑料袋里,每袋至少一包,那么张奶奶一共有多 少种不同的装果冻的方法? 少种不同的装果冻的方法? • 分析:先判断是否有序,没有说每袋分别分给谁, 1+2+7,2+1+7,7+1+2这三种算是同一种分法, 是无序的;再判断范围,每袋至少一包,所以最 小是1,最大是8 • 解:根据题意可进行如下分配,(1,2,7)(1,3,6) (1,4,5)(2,2,6)(2,3,5)(2,4,4)(3,3,4) 答:一共有7种分法。
枚举法
一、“枚举法”概念:在研究问题时,把所 枚举法”概念 有可能发生的情况一一列举加以研究的方 法叫做枚举法(也叫穷举法)。 二、“枚举法”特点:有条理、不重复、不 枚举法”特点: 遗漏,使人一目了然。
枚举法二
• 一、本节课重点 重点:研究将一些东西分给三 重点 三 个人。 • 二、方法 方法:先固定第一个人分到的东西的 方法 数量,然后再把剩下的东西分给两个人。 在分好类的情况下,将每一类的情况有多 少种方法枚举出来,最后将所有情况相加, 就能得到整道题的答案。
首位为1,有以下4种情况: 114,123,132,141. 首位为2,有以下3种情况: 213,222,231 首位为3,有以下2中情况: 312,321 首位为4,有以下1种情况: 411 则共有:4+3+2+1=10(种)情况
字典排列法: 字典排列法:
从首位开始,按从小到大的顺序枚举第一位, 对于每种情况再按从小到大的顺序枚举第二位, 依次类推,这种方法称为字典排列法。 字典排列法。 字典排列法 顾名思义,就是类似于字典中各个词条的排列 方法。 在很多枚举问题中,我们都可以用字典排列法 枚举,大家在熟练应用之后,会觉得这样枚举起 来,非常方便。
解:当小悦分到1个苹果时,即首位为1,有 以下4种情况,114,123,132,141. 当小悦分到2个苹果时,即首位为2,有以 下3种情况,213,222,231. 当小悦分到3个苹果时,即首位为3,有以 下2种情况,312,321. 当小悦分到4个苹果时,即首位为4,有以 下1种情况,411 4+3+2+1=10(种) 答:一共有10种分法。
• 例题2:汤姆、杰瑞和德鲁比都有蛀牙,所以他们 汤姆、杰瑞和德鲁比都有蛀牙, 汤姆 一起去牙医诊所看病,医生发现他们一共有8颗蛀 一起去牙医诊所看病,医生发现他们一共有 颗蛀 他们三人可能分别有几颗蛀牙? 牙,他们三人可能分别有几颗蛀牙? • 分析:都有蛀牙说明每个人的蛀牙数目不能为0, 每人至少有1颗,一共有8颗蛀牙,所以最多的蛀 牙数是6,想想为什么不是7. 题中有三个人的名字,所以三个人是有次序的, 我们将汤姆看成是首位,杰瑞看成第二位,德鲁 比看成第三位,则可以运用字典排列法枚举。