資源簡介 寧波“十?!?024 屆高三 3 月聯考 技術試題卷解析信息技術(共 50 分)1. 下列關于數據與信息的說法,不正確的是A. 在計算機中, 數據一般以文件的形式存儲B. 存儲信息的載體遭到破壞,其承載的信息會消失C. 大數據需要特定的技術和分析方法將其轉化為價值D. 預訂車票時, 余票的數量是數據, 座位等級不是數據【答案】D(【解析】(本題考查數據與信息)【推薦指數】★★(常規概念題)數據是對客觀事物的符號表示。D:預訂車票時,余票的數量是數據,座位等級也是數據)2. 下列關于人工智能的說法,正確的是A. 深度學習需要手工構造知識庫B. 強化學習是從過去的經驗中不斷學習,提升能力C. 行為主義人工智能中,智能行為就是對符號的推理和運算D. 混合增強人工智能中, 以人工智能為主,人類智能為輔助【答案】B(【解析】(本題考查人工智能)【推薦指數】★★(常規概念題)A.深度學習從數據出發, 學習數據中蘊含的概念或模式, 不需要手工構造知識庫;B.強化學習是根據結果反饋來調整相應的學習方法,即從過去的經驗中不斷學習,提升能力;C.符號主義人工智能中,智能行為就是對符號的推理和運算;D.混合增強人工智能中,人類智能和機器智能彼此協調、相互取長補短,但是人類智能是“智能回路”的總開關)閱讀下列材料, 回答第 3 至 5 題:某科技館售票系統,參觀者可以通過科技館官方網站或手機應用程序購買門票,并可以選擇將電子門票保存 到手機上, 可用電子門票或二維碼等電子形式進行檢票。系統通過收集和分析參觀者的購票數據、參觀路線和參 與活動情況,優化展覽設計和活動策劃, 并對參觀者流量和使用情況進行實時監控和統計, 為科技館的管理決策 提供科學依據。3. 下列關于該信息系統組成的說法,正確的是A. 手機應用程序是系統軟件B. 該系統中的用戶就是全體參觀者C. 該系統的運行可以沒有通信網絡D. 該系統中參觀者的購票數據、參觀路線一般存儲在數據庫中【答案】D1(【解析】(本題考查信息系統組成)【推薦指數】★★(常規概念題)A.手機應用程序是應用軟件;B.該系統中的用戶包括全體參觀者、使用者、維護者、開發者等;C.該系統的運行需要通信網絡去完成購買等各項服務;D.該系統中參觀者的購票數據、參觀路線一般存儲在數據庫中)4. 下列關于該信息系統功能和應用的說法, 不正確的是A. 該系統基于數據分析, 支持科學決策B. 該售票系統簡單易用,不存在技術門檻C. 斷電后該系統無法運行, 體現了系統對外部環境有依賴性D. 參觀者向系統提交購票數據、參觀路線等, 體現了數據的收集和輸入功能【答案】B(【解析】(本題考查信息系統功能和應用)【推薦指數】★★(常規概念題)B.該售票系統簡單易用,但是依舊存在技術門檻(手機、打字等都算是門檻))5. 智能手機已廣泛應用到人們的日常生活中,下列說法不正確的是A. 智能手機是一種最常見的移動終端設備B. 參觀者將電子門票保存到手機后,存儲在 RAM 中C. 影響智能手機的主要性能指標有 CPU、存儲和屏幕分辨率等D. 手機出示二維碼檢票時,屏幕會根據環境自動調節亮度,主要依賴光線傳感器的植入【答案】B(【解析】(本題考查移動終端)【推薦指數】★★(常規概念題)B.參觀者將電子門票保存到手機后,存儲在ROM中)6. 下列關于網絡系統的說法,正確的是A. 傳輸控制協議負責將信息從一個地方傳送到另一個地方B. 構建家庭網絡時, 往往將無線終端與路由器的 LAN 口連接C. 數據通信是通信技術和計算機技術相結合而產生的一種通信方式D. 手機之間通過移動通信網絡通信時,一部手機可以直接將信號傳遞給另一部手機【答案】C(【解析】(本題考查網絡系統)【推薦指數】★★(常規概念題)A.網際協議負責將信息從一個地方傳送到另一個地方B.構建家庭網絡時,往往將有線終端與路由器的LAN口連接D.手機之間通過移動通信網絡通信時,一部手機不可以直接將信號傳遞給另一部手機)7. 某段未經壓縮的音頻,采樣頻率是 44. 1kHz,量化位數為 8b,下列說法正確的是A. 聲音數字化需要經過采樣和量化兩個過程B. 該音頻數字化時, 量化值取值范圍為 1~2562C. 用手機播放音頻的過程實現了信號的數模轉換D. 該音頻數字化時, 每分鐘的采樣樣本數為 44100 個【答案】C(【解析】(本題考查信息編碼)【推薦指數】★★★★A選項, 數字化需要經過采樣、量化、編碼三個過程。B選項,8b的量化值取值范圍是0~255。D選項,44.1kHz說明每秒采樣樣本數是44100)8. 某完全二叉樹, 中序遍歷結果為“ 甲乙丙丁” ,則后序遍歷結果是A. 甲乙丁丙 B. 丙乙甲丁 C. 甲丁丙乙 D. 乙丁丙甲【答案】A(【解析】(本題考查二叉樹)【推薦指數】★★根據節點數,以及完全二叉樹畫出二叉樹結構圖,再根據中序遍歷。所以后序遍歷是甲乙丁丙。○丙○乙○丁○甲)9. 有一個空棧, 若元素入棧的順序是 a ,b ,c ,d ,e ,第 1 個出棧的元素是 d,則當所有元素都出棧后,下列說 法正確的是A. c 一定比 a ,b 先出棧 B. 最后一個出棧的元素一定是 eC. 最后一個出棧的元素一定是 a D. a ,b ,c 出棧的先后順序不確定【答案】A(【解析】(本題考查棧)【推薦指數】★★d第1個出棧,所以a、b、c一定在棧內,則根據先進后出原則,c一定比a和b先出棧。)10. 有如下 Python 程序段:import randomdef binary(L,R,key):m=(L+R)//2ifL>R:return Lif key<=a[m]:return binary(m+1,R,key)else:return binary(L,m-1,key)a=[9,8,7,7,7,5,5,3]x=random. randint(1,4)*2+1print(binary(0,7,x))執行該程序段后,輸出結果不可能是3A. 2 B. 5 C. 7 D. 8【答案】A(【解析】(本題考查二分查找和遞歸算法)【推薦指數】★★x的值可能是3,5,7,9。a=[9, 8,7,7,7, 5,5, 3 ],則x=3時,L=8,x=5時,L=7,x=7時,x=9 x=7 x=5 x=3L=5,x=9時,L=1.)11. 用數組 a 和 b 存儲兩個降序序列,用數組 c 存儲合并后的降序序列。如 a = [19,16,12,8,5],b = [20,15,14,10,6], c=[20,19,16,15,14,12,10,8,6,5]。實現該功能的程序段如下:c = [- 1]*(len(a)+len(b))p = 0;tot=len(a)for i in range(len(a)):(1)for i in range(len(b)):while b[i]p += 1if c[p]==-1:c[p]=b[i];tot+=1else:for j in range( (2) ):c[j+1] = c[j]c[p] = b[i]tot+=1上述程序段劃線處可選代碼為:①c. append(a[i]) ②c[i]=a[i] ③tot,p-1,- 1 ④tot,p,-1 ⑤tot-1,p-1,- 1則(1)(2)處的代碼依次為A. ①③ B. ①④ C. ②⑤ D. ②③【答案】C(【解析】(本題考查插入排序)【推薦指數】★★★已知c已賦長度,因此(1)應填寫②而非①。從tot=len(a),可知tot表示數組的最后個元素的后一個位置或數組的元素個數。例如c=[10,20,30,40,-1,-1…],tot=4,因此向后移動時,先執行c[4]=c[3],因此(2)填寫⑤)12. 有如下 Python 程序段:(def)poem(lst,q,flag):st=""for i in range(7):st+=lst[q][0]q=lst[q][flag]print(st)hw=[["冬",-1,1],["梅",0,2],["枝",1,3],["幾",2,4],["點",3,5],["雪",4,6],["花",5,7],["開",6,8],["春",7,9],["信",8,10],["來",9,0]]4p=head=0flag =1;step=3for i in range(2):flag=-flagp=hw[head][flag]poem(hw,p,flag) #①for j in range(step):p=hw[p][flag]poem(hw,p,flag) #②關于上述程序段的說法, 不正確的是A. 語句①第一次執行時,輸出“梅枝幾點雪花開”B. 語句②第二次執行時,輸出“開花雪點幾枝梅”C. 若加框處語句改為 flag+=(-1)**i,不會影響程序運行結果D. 若將 hw 中的 ["梅",0,2]修改為["梅",0,3],輸出結果將不含文字“枝”【答案】D(【解析】(本題考查鏈表)【推薦指數】★★★★原循環雙向鏈表是冬→梅→枝→幾→點→雪→花→開→春→信→來→冬, 第1次從p節點開始輸出七言, 再跳3個節點,繼續輸出七言。第2次反向從p節點開始輸出七言,再跳3個節點,繼續輸出七言。因此依次輸出4句話是梅枝幾點雪花開,點雪花開春信來,來信春開花雪點, 開花雪點幾枝梅。因此AB選項正確。C選項,i=0時,flag+=(-1)**i=2,切片效果等效flag=-1。i=1時,flag+=(-1)**i=1。因此C也正確。D選項,修改后, 第4次輸出還是含有枝。)13. 某網約巴士, 車上最初有 12 個空座位, 從起點站向終點站行駛, 不允許掉頭或改變方向, 現有新的訂單, 請 判斷其是否能預約成功。請回答下列問題:(1)若網約巴士已預約成功的數據為: [2,1,5],[1,3,7],[3,2,8],[2,4,7],[3,5,10],其中每個元素有 3 個數據項, 分別表示預約人數、出發站點和到達站點, 當前接到訂單[4,5,8],▲ (選填: 能/不能)預約成功。(2)實現上述功能的部分 python 程序如下, 請在劃線處填入合適的代碼。#數組 trips 存儲預約信息,trips[i]=[num, start, end]表示第 i 個預約信息有num 個乘客,出發站點為 start, 到達站點為 end,站點編號為 1~10。total=12 #空座位總數stations=10 #站點總數diff=[0]*(stations+1)count=[0]*(stations) #存儲站點上下車后的乘客人數for i in trips:①diff[i[2]]-=i[0]for j in range(1,stations):for k in range( ② ):count[j]+=diff[k]num=int(input("請輸入乘車人數: "))start=int(input("請輸入出發站點編號: "))end=int(input("請輸入到達站點編號: "))flag=True5for i in range(start,end):if ③ :flag=Falsebreakif flag:print("預約成功, 請到站點等候! ")else:print("該訂單未能成功預約到即將駛來的 bus!")【答案】(1)不能(1分)(2)①diff[i[1]]+=i[0](2分);②1,j+1 或 0,j+1 或 j+1 或 j,0,-1,或 j,-1,-1 或其他等價答案(2分)③count[i]+num>total 或 num>total-count[i]或其他等價答案(2分)(【解析】(本題考查數組)【推薦指數】★★★(1)由預約數據分析可以得到下方左邊的圖示過程(與第2小題的思路稍有不同),站點5的空位數只有3個,訂單[4,5,8]不能預約成功。(2)遍歷每個訂單,diff[i[2]]-=i[0]記錄了每個訂單在達到站點下車人數,①處要記錄每個訂單在出發站點上車人數diff[i[1]]+=i[0];遍歷每個站點,count[j]+=diff[k]在統計j站點車上的總人數,又因為diff中記錄了每個站點的上下車數據,因此每個站點的總人數等于該站點及前面所有站點的上下車數據之和,因此②處k要遍歷第1個站到第j個站點, 填1,j+1或0,j+1或j+1或j,0,-1,或j,-1,-1,第(1)小題例子用該算法的計算過程如上方右邊圖所示;(3)若新訂單的預約站點區間存在座位不夠的情況則預約失敗, ③處填count[i]+num>total或num>total-count[i]。)(【解析】(本題考查數組的應用)【推薦指數】★★★★trips(已預約)53-342-233-321-112-2stations12345678910diff051210-3-3-3count056899630根據題干trips存儲了預約信息例如[[2,1,5],[1,3,7],[3,2,8],[2,4,7],[3,5,10]])6(瀏覽器1) (Web服務器) (IoT模塊) (智能終端) (瀏覽器2) (第14題圖a) (diff存儲對應站點人員變化情況, 上車用+人數,下車用-人數。變化情況入上圖。(1)count為該站點上下車后的乘客人數,從上表可知,站點5乘客上下車后人數為9,若當前訂單為[4,5,8] ,車子座位總數為12,9+4大于12故不能預約成功。(2)①該程序段為遍歷trips數據,將對應的人員變化添加到對應的diff中。第1次i為[2,1,5]即在站點1有2個人上車,故diff[[i[1]]+=i[0](即diff[1]+=2),站點5這兩個人下車diff[[i[2]]-=i[0](即diff[5]-=2),因此①處為diff[[i[1]]+=i[0]。②題干中已經表明count[j]為站點j乘客人數,即從站點1到站點j上下車的人數的總和。故fork為從1到diff中的值的和,故②為1,j+1③flag==False表示該訂單未能預約成功。當該站點原有人數+新訂單人數超過total(12人),則不能預約成功, 故③處為_count[j]+num>total)14. 小丁同學發現小區附近的路燈開啟時間不合理, 他設計并搭建了一個光線監測系統, 傳感器采集光線值由智 能終端經 IoT 模塊發送到 Web 服務器,當光線值低于閾值時蜂鳴器播放音頻,小丁和路燈管理人員可以通 過瀏覽器查看歷史數據。請回答下列問題:①(互聯網)②(1)第 14 題圖 a 中①和②處的設備依次為 ▲ (單選,填字母:A. 執行器、傳感器/ B. 傳感器、執行 器)。(2)關于該系統的說法正確的是 ▲ (多選, 填字母)A. 瀏覽器可直接訪問數據庫來獲取歷史數據B. 該系統軟件架構的優勢之一是方便升級和維護C. 在硬件搭建時需要考慮智能終端與 IoT 模塊之間的接口匹配問題D. 根據數據的存儲要求, 確定數據庫的結構, 該過程屬于前期準備中的概要設計 (注:全部選對的得 2 分, 選對但不全的得 1 分, 不選或有選錯的得 0 分)7(3)小丁基于 Flask Web 框架編寫服務器端的程序,部分代碼如下。若要通過瀏覽器獲取視圖函數 hello()返 回的頁面, 則應訪問的 URL 是 http:// ▲ 。#導入 Flask 框架模塊及其他模塊, 代碼略app=Flask(__name__)@app. route("/show")def hello():#從數據庫中讀取光線數據,并返回頁面,代碼略#服務器其他功能,代碼略if name ==" main ":app. run(host=" 192. 168. 43. 17", port=8080)(4)小丁在系統開發完成后, 想從多角度觀察程序運行時是否有錯誤。該系統每隔 5 分鐘采集一次數據,當 小丁測試時,光線值一直高于閾值, 系統運行正常。小丁想立刻觀察當光線值低于閾值時, 蜂鳴器能否 播放音頻,請你幫助小丁設計可行方案。(注:本系統中光線傳感器和蜂鳴器正常,并且與智能終端的 連接正常。請回答兩項, 1 項正確得 1 分)(5)小丁將系統中 2024-01-01 到 2024-01-07 的每天 17:00- 18:00 數據導出,保存在 light. csv 文件中, 部分數據 如第 14 題圖 b 所示,統計每天該時間段中光線值小于 100 的次數, 并繪制如第 14 題圖 c 所示線形圖, 部分 Python 程序代碼如下:(第14題圖b第14題圖c)df=pd. read_csv("light. csv")day=[]for data in df["上傳時間"]:day. append(data[8:10])df. insert(0,"日期",day) #插入列df=df[ ]df1=df. groupby("日期"). count()plt. plot( )#設置繪圖參數,代碼略①請在劃線處填入合適的代碼。②小丁要繪制如第 14 題圖 c 所示線形圖, 則方框中應填入的正確代碼為 ▲ (單選, 填字母)A. df1. 日期,df1. 檢測值 B. df1. index,df1. 檢測值 C. df1. index,df1. values【答案】(1)A(1分)(2)B C(2分)(3)192.168.43.17:8080/show (1分)(4)①將光線傳感器置于黑暗的環境中;②將程序代碼中的閾值調整到足夠大;或其他等價答案;注:回答兩 項, 1項正確得1分,共2分(2分)(5)①df. 檢測值<100 或 df[“檢測值”]<100 (2分)②B(2分)(【解析】(本題考查信息系統搭建和pandas數據處理))8(【推薦指數】★★★(本題考點較為常規,題目較為簡單,可以作為保溫練習)(1)傳感器采集到數據發送給智能終端,智能終端將指令發給執行器,因此①處是執行器;②處是傳感器。答案選A。(2)A.瀏覽器需要訪問服務器才能獲取歷史數據。B.正確。C.正確。D.根據數據的存儲要求,確定數據庫的結構屬于詳細設計。答案選BC。(3)要通過瀏覽器獲取視圖函數hello()返回的頁面, 需要正確的服務器地址、端口以及路由,URL是:http://192.168.43.17:8080/show。(4)題干中提到想立刻觀察當光線低于閾值時,蜂鳴器能否播放音頻。可行的方案為:①將光線傳感器置于黑暗的環境中②將程序代碼中的閾值調整到足夠大或其他等價答案。(5)要統計每天該時間段中光線值小于100的次數,所以得對檢測值進行篩選,語句為df=df[df.檢測值<100]。故答案為df.檢測值<100或df[“檢測值”]<100。根據df1=df.groupby(“日期”).count()可知,日期已經作為索引,最后形成的是DataFrame對象,因此繪制線型圖時,應該用df1.index,df1.檢測值。故答案選B。)(【解析】(本題考查信息系統和Pandas)【推薦指數】★★★(1)在信息系統中,傳感器向智能終端中傳輸收集到的數據;智能終端向執行器發送指令,執行相應操作。則①處為執行器,②處為傳感器,選A。(2)當需要查詢數據時,瀏覽器主要向服務器發送對應的請求, 服務器再從數據庫中讀取相應數據,則A錯。該信息系統架構為B/S架構,其優勢之一為方便升級和維護,則B對。由于不同的智能終端和IoT模塊,連接方式可能會有不同,故需要考慮只能終端和IoT模塊之間的連接關系型,則C對。確定數據庫的結構屬于需求分析中的詳細設計,則D錯。選B、C。(3)根據代碼,確定IP地址為192.168.43.17,端口號為8080,路由地址為/show,則完整地址為192.168.43.17:8080/show。(4)根據題干要求,需要測試光線低于閾值時,蜂鳴器能否正常播放。從系統測試角度, 可以從硬件測試和軟件測試兩個角度取設置。從硬件角度,可以選擇遮擋光線或將光線傳感器置于黑暗的環境中去測試。從軟件角度,可以考慮將程序代碼中的閾值調整到足夠大去測試。(5)代碼首先從light.csv中讀取數據,之后在df中插入“日期”列,記錄當前日期。之后要對每天該時間段中光線小于100的次數進行統計, 則可知劃線處為篩選操作,篩選條件為小于100次,則答案為df.檢測值<100,下一行代碼對日期進行分組統計,由于默認as_index取值為True,則將日期列變為索引列,即df1.index,則最后繪制圖像時,選擇的x軸為df1.index,y軸為df1.檢測值。則答案選B。)15. 某學校舉行游園活動, 有 n 個限時活動項目(如 5 分鐘夾珠),活動項目編號為 1~n ,每個活動項目從上午 8:30 開始, 結束時間不一定相同。考慮到活動場地間的距離, 活動規定:參加前一個活動后,需間隔 10 分 鐘再參加下一個活動,每個同學不能同時進行兩個及兩個以上的活動。小丁同學對 n 個游園活動項目都非常感興趣,但是時間有限,他最多可以參加幾個活動項目?編寫程序 模擬計算過程, 從結束時間最早的活動項目開始選擇, 如果完成該項活動的時間不超過該項目結束時間, 選 擇該活動,如果超出結束時間,則考慮是否可以替換之前選中的某個活動,使完成已選項目的時間盡可能少。 請回答下列問題:(1)若活動項目數據如下圖所示, 則最多可以參加的活動項目數量為 ▲ 。編號 名稱 限時 結束時間1 夾珠 5 9:202 聯想 ABC 20 9:3093 套圈 5 9:004 趣味畫 10 9:10(2)定義如下函數 time(),將結束時間(格式:“ 時:分” )轉換為分鐘,請在劃線處填入合適的代碼。 def time():for x in activity: # 列表 activity 存儲活動項目數據y=x[3]for j in range(len(y)):if y[j]==":":breakt= ▲x[3]=t-510 #開始時間 8:30 為 510 分鐘(3)定義如下 sort(x)函數, 參數 x 為活動項目數據,按照結束時間進行升序排序。def sort(lst):n=len(lst)for i in range(n,1,- 1):for j in range(1,i):下列選項中,可填入方框中的正確代碼是 ▲ (單選,填字母)。A. iflst[j] >lst[j+1]: lst[j],lst[j+1]=lst[j+1],lst[j] B. iflst[j] C. iflst[j][3]lst[j+1][3]: lst[j],lst[j+1]=lst[j+1],lst[j](4)實現程序功能的部分代碼如下, 請在劃線處填上合適的代碼。‘’’讀取 n 個活動項目的數據, 存儲在列表 activity 中,每個元素有四個數據項, 分別為編號,名稱, 限時, 結束時間, 如[1,"夾珠",5,"9:20"],代碼略。‘’’time()sort(activity)que=[""]*nhead=tail=0total=0for i in range(n):if total+activity[i][2]<=activity[i][3]:que[tail]=activity[i]tail+=1total+=activity[i][2]+10elif head!=tail and que[head][2]>activity[i][2]:①head+=1que[tail]=activity[i]tail+=1temp=que[tail-1]j=tail-2while ② :10que[j+1]=que[j]j-=1que[j+1]=tempprint("最多可以參加的活動項目數量是:", tail-head)【答案】(1)3;(2)int(y[:j]) * 60 + int(y[j + 1:]) 或 int(y[0:j]) * 60 + int(y[j + 1:len(y)]) 等類似答案(3)C (4)①total += activity[i][2] - que[head][2];②j >= head and temp[2] > que[j][2] 或 j >= head and temp[2] >= que[j][2] 或類似答案【解析】 (本題考查字符轉換、冒泡排序和隊列維護)【推薦指數】★★(第1-3題難度不大,第4題算法不夠好)(1)根據題目規則, 如下表的數據選擇過程為:編號 名稱 限時 結束時間1 夾珠 5 9:202 聯想ABC 20 9:303 套圈 5 9:004 趣味畫 10 9:10第1個選擇:選3號活動套圈,且完成時間是8:35,小于結束時間9:00,+10分鐘后為8:45;第2個選擇: 選4號活動趣味畫, 且完成時間是8:55,小于結束時間9:10 ,+10分鐘后為9:05; 第3個選擇: 選1號活動夾珠,且完成時間是9:10,小于結束時間9:20,+10分鐘后為9:20;第4個選擇: 選2號聯想ABC,且完成時間是9:40,大于結束時間9:30,且該活動完成時間最長, 不能替換 前面已有的活動,故不選擇該活動;所以最多參加3個活動,分別是3號、 4號和1號活動。(2)time()函數中,用一個j循環找到“: ”所在的位置,則從0位置到j-1位置是小時數據, j+1到末尾是分鐘數 據,且統一換算成分鐘的公式是:小時*60+分鐘,故答案是int(y[:j]) * 60 + int(y[j + 1:]) 或 int(y[0:j]) * 60 + int(y[j + 1:len(y)])(3)sort(x)函數,將列表x按照結束時間升序排列, 從題目所給的數據來看, 結束時間在列表x的第4列;從題 目所給的代碼可以, 該排序是冒泡排序, 外循環i從n到2,內循環j從1到i,即從前向后冒泡, 則應當是大 數向后沉, 結合以上分析,題目中冒泡部分代碼如下注釋:for i in range(n, 1, - 1): #循環n-1次, i從n到2for j in range(1, i): #每次循環從1到i,從前向后冒泡iflst[j][3] < lst[j- 1][3]: #若前一個元素j-1的結束時間大于后一個元素j lst[j],lst[j- 1] = lst[j- 1],lst[j] #將前一個元素j-1換到j(4)算法整體分析:第一步,將所有活動按照結束時間從小到大排序;第二步,從第一個活動開始,逐個選擇活動, 并計算完成時間到total變量中,選擇邏輯為: 若total + 限時 < 結束時間, 將活動記錄到que隊列的末尾;若total + 限時 > 結束時間, 則看que隊列中最大的元素的限時是否大于當前活動,若大于則用 當前活動替換原來活動, 否則就放棄這個活動。每一次修改過que后,都從后向前做一次插入排序,保持que中元素是從大到小的關鍵代碼注釋及答案如下:for i in range(n):if total + activity[i][2] <= activity[i][3]: #當前活動完成后累積時間小于結束時間 que[tail] = activity[i] #將當前活動放到隊列末尾tail += 1total += activity[i][2] + 10 #更新當前時間totalelif head != tail and que[head][2] > activity[i][2]: #當前活動限時小于已選擇的最長活動11(que[tail]=activity[i]) (j=tail-2) (①#total +=activity[i][2] - que[head][2]用當前活動替換隊列頭的活動,并重新計算totalhead +=1que[tail] = activity[i]tail +=1temp = que[tail -1] #去隊列最后一個元素j = tail - 2 #j從后向前遍歷隊列while②: #j>=headandtemp[2]>que[j][2]隊列沒有到頭且temp大于j元素,就向前找que[j+1] = que[j]j-=1que[j+1] = temp #找到temp插入位置,插入)【解析】 (本題以游園活動的簡單進程為依托,考查了字符串、排序、數組、插入排序等知識)(【推薦指數】★★★★(題目難度不大,有利于學生考場正常發揮))((1)依據題目表述,從結束時間最早的活動項目開始選擇,那么先選擇套圈,結束時間為8:35,間隔10分鐘)(后,選擇趣味畫,結束時間為8:55,間隔10分鐘后,選擇夾珠, 結束時間為9:10,間隔10分鐘后, 若選擇)(聯想ABC,則超出該活動的結束時間,也無法替換前面消耗時間最長的活動。所以最多可以參加的活動)(項目數量為3。)((2)自定義函數time()實現了將時間格式轉換成分鐘格式,考查了字符串的切片操作。空格所在處應該是將)(“時: 分”的兩部分內容轉換為分鐘,所以為int(y[:j])*60+int(y[j+1:])。)((3)A、B選項排序的關鍵字都是錯誤的,是按照活動的結束時間升序排序。D選項缺了最左邊兩個元素的比)(較排序。C選項正確。)((4))(time())(sort(activity))(que=[""]*n)(head=tail=0)(total=0)(for i inrange(n):)(iftotal+activity[i][2]<=activity[i][3]:#total為參加了活動的結束時間)(tail+=1) (total+=activity[i][2]+10) (elifhead!=tail and que[head][2]>activity[i][2]:) (①) (head+=1) (que[tail]=activity[i]) (tail+=1)#新的活動參加后修改活動排列順序為按活 動時長降序排序,為了替換時直接替換掉活 動序列中的最前面的活動項目。此處用了插 入排序算法。這里要注意的是 j 是已排序的 活動范圍,那么最前面的位置應該是 head, 而不是 0,序列中替換的活動沒有刪除,而是 用隊列出隊的思想解決的。 (temp=que[tail-1])所以, 此處為 j>=head and temp[2]>que[j][2](while②:) (que[j+1]=que[j])#無法參加 i 項活動,則考慮替換活動時間 較長的項目替換后, 修改活動結束時間 (j-=1)total 為減去活動減少的時間。所以為 (que[j+1]=temp)total+=activity[i][2]-que[head][2](print("最多可以參加的活動項目數量是:", tail-head))12 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫