寧波市2022學年第一學期選考模擬卷第16題解析

新教材怎么教,取決于新高考怎么考。新高考的題目類型如何分布?題目難度如何?一直是老師們最為關(guān)心的問題。
在僅有課標和教材,沒有考綱和樣卷的情況下,各類名校和聯(lián)盟的命題老師們認真思考、努力探索,為大家提供了多份質(zhì)量上乘、極具參考價值的聯(lián)考模擬卷。
認真研究這些模擬卷,分析它們的命題思路和解題方法,總結(jié)題型和算法框架,不僅有利于高考備考,對新課教學也有很大的借鑒意義。
寧波市2022學年第一學期選考模擬卷第16題
模擬算法、一維數(shù)組和隊列基本操作,要求學生理解使用循環(huán)隊列模擬數(shù)牌過程的算法,掌握一維數(shù)組和隊列基本操作,深切理解數(shù)組下標從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 = ②
③ # 設(shè)置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 # 構(gòu)造循環(huán)單鏈表
b = [0] * n # 0代表牌面未定
pre = n - 1 # 指向頭節(jié)點的前驅(qū)節(jié)點
for m in range(1,n+1):
for j in range(m-1): # 依次將m-1張牌放到牌堆底部
pre = ④
p = a[pre][1] # 指向翻牌位置
⑤ # 設(shè)置翻牌位置的牌面為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
# 主函數(shù)部分
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
為了保證解析的原創(chuàng)性和思維的獨特性,我都是獨立解題后,先不看答案(除非題目不會做),直接把解析寫好,再去看答案。
當然,如果發(fā)現(xiàn)參考答案有更好的思路,我還是很樂于學習和借鑒的。同時,由于本人水平有限,解析中難免出現(xiàn)疏漏甚至錯誤之處,敬請諒解。
無論是贊同還是反對我的看法,都請你給我留言。如果你有新的想法,千萬不要憋在心里,請發(fā)出來大家一起討論。讓我們相互學習,共同進步!
需要本文word文檔、源代碼和課后思考答案的,可以加入“Python算法之旅”知識星球參與討論和下載文件,“Python算法之旅”知識星球匯集了數(shù)量眾多的同好,更多有趣的話題在這里討論,更多有用的資料在這里分享。
我們專注Python算法,感興趣就一起來!
相關(guān)優(yōu)秀文章:
