内容正文:
ZHISHI JIEXI
知识解析
1. 算法思想
枚举算法的基本思想是把问题所有可能的解一一列举袁然后判断每一个列举出的可能解是
否为问题的真正解遥
2. 算法流程
3. 枚举算法渊三要素冤
淤枚举范围遥 确定解的范围袁通过循环结构渊for/while语句冤对可能解一一罗列遥
于条件判断遥 在循环体内袁对当前可能解进行判断渊使用 if语句判断某个条件冤袁符合条件则
处理渊保存解尧设置标记或直接输出问题解冤遥
盂问题解输出遥 若问题解有多个可以先保存渊或标记冤袁在枚举结束后输出所有解遥
4. 算法的优化
优化问题策略袁缩小枚举范围袁提升算法效率遥
JINGDIAN KAOTI
经典考题
揖例题铱 咱2023窑7浙江学考暂小张收集了章回体小说叶三国演义曳的第 1章回至第 120章回
的 120个文件袁其文件名依次为 sg1.txt尧sg2.txt尧噎噎尧sg120.txt遥他编写 Python程序袁对书中人物同
时出现的情况进行简单分析袁人物及其别名渊如野孟德冶是野曹操冶的别名冤作同一人处理遥 运行程
序袁用户输入野曹操|孟德 刘备|玄德冶袁输出结果如图所示袁图中咱11,28暂表示曹操袁刘备在第 11章
回至第 28章回同时出现遥
是
枚举的值在指定范围吗?
枚举的值符合问题解条件?
输出该枚举值渊解冤或记录问题解
取下一个枚举值
是
否
否
3.8 枚举算法及其程序实现
第三章 算法的程序实现
51
同步宝典 高中信息技术 必修 1
主程序如下院
'''
输入姓名尧别名袁姓名存入列表 names袁如 names=咱"曹操","刘备"暂
统计各个章回中袁列表 names中每个人物渊含别名冤出现的次数袁结果存入字典 total袁如 total=
{"曹操":咱2,5,7,...暂,"刘备":咱50,47,0,...暂}袁表示曹操在第 1袁2袁3袁噎噎章回分别出现了 2袁5袁7袁噎噎
次袁代码略
'''
num,result=calculate(total)
mlen=getMaxLen(result)
print("人物同时出现的章回数为:",num,",章回依次为:")
print(result)
print("人物同时出现的最大连续章回数是:",mlen)
请回答下列问题院
渊1冤观察图可知曹操与刘备在第 36章回中 渊单选袁填字母院A. 同时/B. 没有同时冤
出现遥
渊2冤定义函数 calculate(total)袁功能是统计列表 names中人物同时出现的章回数袁以及同时出
现的章回袁结果示例如图所示袁请在画线处填入合适的代码院 遥
def calculate(total):
num,length=0,0 #num保存 120个章回中人物同时出现的章回数
result=咱暂 #result咱i暂咱0暂尧result咱i暂咱1暂分别存储第 i+1段章回的起尧止章回号
k=-1
for i in range(0,120):
if allIn(total,i):
if length==0:
begin=i+1
result.append(咱begin,begin暂) #在列表 result末尾添加一个元素
k+=1
length+=1
result咱k暂咱1暂=i+1
else:
length=0
return num,result
渊3冤定义函数 getMaxLen(result)袁功能是统计最大连续章回数袁请在画线处填入合适的代码院
遥
52
def getMaxLen(result):
mlen=0
for item in result:
t=item咱1暂-item咱0暂+1
if t> :
mlen=t
return mlen
渊4冤定义函数 allIn(total,cno)袁功能是判断列表 names中人物是否同时出现在 cno章回中袁若
同时出现袁返回 True袁请在画线处填入合适的代码院 遥
def allIn(total,cno):
for item in names:
if :
return False
return True
揖分析铱 渊1冤观察图可知袁第 36回出现在咱31,45暂中袁表明曹操与刘备这两个人物在 36回同
时出现遥 渊2冤由于 num保存 120个章回中人物同时出现的章回数袁其初值为 0袁因此若检查到符合
条件时袁即调用函数 allIn(total,cno)袁且其值为 True时袁计数器 num加 1袁因此其表达式为 num+=1遥
渊3冤此处统计最大连续章回数袁变量 mlen即为返回值遥 在循环中袁将连续章回数 t与最大值 mlen
进行比较袁若有比最大值 mlen更大的值 t袁则将 t赋值给 mlen遥 渊4冤由于 total={"曹操":咱2,5,7,...暂,"
刘备":咱