宁波市2022学年第一学期选考模拟卷第16题解析
新教材怎么教,取决于新高考怎么考。新高考的题目类型如何分布?题目难度如何?一直是老师们最为关心的问题。
在仅有课标和教材,没有考纲和样卷的情况下,各类名校和联盟的命题老师们认真思考、努力探索,为大家提供了多份质量上乘、极具参考价值的联考模拟卷。
认真研究这些模拟卷,分析它们的命题思路和解题方法,总结题型和算法框架,不仅有利于高考备考,对新课教学也有很大的借鉴意义。
宁波市2022学年第一学期选考模拟卷第16题
模拟算法、一维数组和队列基本操作,要求学生理解使用循环队列模拟数牌过程的算法,掌握一维数组和队列基本操作,深切理解数组下标从0开始。
(1)6
(2)① a[head]
② cnt += 1
③ b[a[head]-1] = cnt 或 b[a[head]-1] = i
def way_1(n):
a = [i for i in range(n)]
b = [0] * n # 0代表牌面未定
i = 0
for m in range(1,n+1):
cnt = 1
while ① : # 依次将m-1张牌放到牌堆底部
if a[i] >= 0:
cnt += 1
i = (i + 1) % n
while a[i] == -1: # 跳过已删除元素
i = ②
③ # 设置a[i]处的牌面为m
a[i] = -1 # 标记a[i]被删除
return b
def way_2(n):
a = [[i, i+1] for i in range(n)]
a[n-1][1] = 0 # 构造循环单链表
b = [0] * n # 0代表牌面未定
pre = n - 1 # 指向头节点的前驱节点
for m in range(1,n+1):
for j in range(m-1): # 依次将m-1张牌放到牌堆底部
pre = ④
p = a[pre][1] # 指向翻牌位置
⑤ # 设置翻牌位置的牌面为m
a[pre][1] = ⑥ # 删除a[p]
return b
def way_3(n):
a = [i for i in range(n)]
b = [0] * n # 0代表牌面未定
head = tail = 0
for i in range(1,n+1):
for j in range(i-1): # 依次将i-1张牌放到牌堆底部
a[tail] = ⑦
head = (head + 1) % n
tail = ⑧
⑨
head = (head + 1) % n
return b
# 主函数部分
n = 6
print(way_1(n))
print(way_2(n))
print(way_3(n))
(1)1, 4, 2, 5, 6, 3
(2)① cnt < m
② (i + 1) % n
③ b[a[i]] = m
④ a[pre][1]
⑤ b[a[p][0]] = m
⑥ a[p][1]或a[a[pre][1]][1]
⑦ a[head]
⑧ (tail + 1) % n
⑨ b[a[head]] = i
为了保证解析的原创性和思维的独特性,我都是独立解题后,先不看答案(除非题目不会做),直接把解析写好,再去看答案。
当然,如果发现参考答案有更好的思路,我还是很乐于学习和借鉴的。同时,由于本人水平有限,解析中难免出现疏漏甚至错误之处,敬请谅解。
无论是赞同还是反对我的看法,都请你给我留言。如果你有新的想法,千万不要憋在心里,请发出来大家一起讨论。让我们相互学习,共同进步!
需要本文word文档、源代码和课后思考答案的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注Python算法,感兴趣就一起来!
相关优秀文章: