資源簡介 絕密★考試結束前(23 年 11 月)臺州市 2023 年 11 月第一次質量評估試題 技術試題第一部分 信息技術完美解析(共 50 分)一、選擇題(本大題共 12 小題,每小題 2 分,共 24 分。每小題列出的四個備選項中只有一個是符合 題目要求的,不選、多選、錯選均不得分)1.下列關于數據、信息和知識的說法,正確的是A.數據的表現形式只有數字和文字B.同一種信息的獲取途徑和方法可以不同C.通過搜索引擎搜索出來的內容都是知識D.信息的價值不會因為時間的變化而改變(【答案】B【解析】本題主要考查數據、信息和知識的理解。選項A,數據的表現形式除數字和文字外,還包括音頻、圖像、視頻等;選項B,正確;選項C,通過搜索引擎搜索出來的內容可以是數據、信息、知識等;選項D,信息具有時效性,價值會因為時間的變化而改變。)閱讀下列材料,回答第 2 至 4 題:杭州亞組委推出的“亞運會票務管理系統”,用戶可使用移動終端等設備,通過瀏覽器進行實名注冊 登錄,選擇相應賽事及座位號后,使用電子支付方式進行支付,即完成購票。生成的電子票會發送至用戶 終端設備。系統使用了 web 漏洞自動防護技術,降低網頁篡改、數據泄露等風險,并且采取多種加密技術 保護個人信息。亞組委也在線下設置了多個門票代售網點,方便群眾購買紙質門票。用戶持電子票或紙質 門票均可到會場檢票設備掃票入場。2.下列關于該系統組成的說法,正確的是A.該票務系統屬于系統軟件B.該系統網絡架構模式采用 C/S 架構C.移動終端屬于該系統的硬件設備D.該系統的用戶是購票成功的人員(【答案】C【解析】本題主要考查信息系統組成相關知識的理解。選項A,該票務系統屬于應用軟件,應用軟件是為了某種特定用途而開發的軟件,可以滿足不同領域、不同問題的應用需求,如辦公軟件、工具軟件、管理軟件等;選項B,通過瀏覽器進行實名注冊登錄,訪問確定為系統網絡架構模式采用B/S架構;選項C,正確;選項D,用戶除包括信息系統的使用者,還有計算機和非計算機設備的操作與維護人員、程序設計員、數據庫管理員、系統分析員等。)臺州市技術選考試題 第 1 頁 共 15 頁3.結合上述材料,下列關于信息系統功能和應用的說法,不正確的是A.用戶注冊過程包含了系統的數據收集和輸入功能B.線上購票跨越時空限制,給用戶帶來了方便C.用戶的購票數據保存在檢票設備中,方便其快速人場D.設置線下代售網點,是一種解決“數字鴻溝” 的方法(【答案】C【解析】本題主要考查信息系統功能和應用的理解。選項C,用戶的購票數據保存在服務器的數據庫中,說法。)4.下列關于該信息系統安全的說法,正確的是A.加密技術的使用是為了保證系統數據的完整性B.用戶在登錄該系統時獲得的短信驗證碼屬于靜態口令C.管理員和普通用戶的用戶權限不同,是身份認證技術應用的一種體現D.漏洞自動防護技術的使用,是為了降低系統被黑客及病毒入侵的風險(【答案】D【解析】本題主要考查信息系統安全相關知識的理解與記憶。選項A,加密技術的使用是為了保證系統數據的安全性;選項B,用戶在登錄該系統時獲得的短信驗證碼屬于動態口令;選項C,管理員和普通用戶的用戶權限不同,是訪問控制技術應用的一種體現,說法不正確;選項D,正確。)5.下列關于人工智能的說法,不正確的是A.某應用中的語音識別技術屬于人工智能的應用B.人工智能技術對經濟發展、社會進步都有巨大的推動作用C.通過模仿人類大腦中神經元之間的復雜交互來進行認知推理,屬于符號主義的表現D.AlphaGo Zero 不依賴人類棋手數據而在自我博弈中不斷提升棋力,屬于強化學習機制(【答案】C【解析】本題主要考查人工智能概念的理解,人工智能方法的辨識。選項C,通過模仿人類大腦中神經元之間的復雜交互來進行認知推理,屬于聯結主義的表現。)6.某多選題有 A 、B 、C 三個選項,程序閱卷時,各選項采用 True和 False 來表示是否進行了選擇(例如: 變量 a 的值為 True 時,表示選擇了 A 選項;變量 b 的值為 False ,則表示未選擇 B 選項) 。若該題正確 答案為“BC” ,下列表達式中能判定考生該題答案全部正確的是A. a and b and cB. a or b and cC. not a and b and cD. not a or b and c臺州市技術選考試題 第 2 頁 共 15 頁(【答案】B【解析】本題主要考查邏輯運算符的運用。考生該題答案全部正確,即a值為False,b,c值為True同時成立,確定答案為C。)7.斐波那契數列(1 、1 、2 、3 、5 、8 、13 、21 、34……) ,其特點是從第三項開始,每一項都是前面兩項的和。 用流程圖描述“求斐波那契數列第 n 項值(n>2)”的部分算法如第 7 題圖所示,則虛線框中應該填入的是第 7 題圖(【答案】B【解析】本題主要考查流程圖分析及迭代算法。循環體中i←i+1語句順序不影響運行結果,主要考慮a,b,c值的迭代過程,將b值及計算出的c值依次賦值給a,b,然后通過新的a,b值計算出c值,確定答案為B。)8.使用數組存儲某二叉樹的形式如第 8 題圖所示,下列描述正確的是A.該二叉樹的后序遍歷為 BDCAB.該二叉樹的深度為 2C.該二叉樹是一棵完全二叉樹D.該二叉樹的葉子節點個數為 3(【答案】A【解析】本題考查二叉樹。結合存儲結構,畫出二叉樹,所以后序遍歷屎BDCA,深度是3,不是完全二叉樹,葉子節點數2。所以選A。)9.有如下 Python 程序段:臺州市技術選考試題 第 3 頁 共 15 頁kcy=int(input())i=0;j=len(a)-1s=""while i<=j:m=(i+j+1)//2if key==a[m]:breakif keyj=m- 1else:i=i+1s+=str(a[m])+","print(s[:- 1])若數組元素 a 的值為[6,15,18,20,25,30,35,38,41,46],輸入正整數 key 值,執行該程序段,輸出的值可能是A.30,20 B.30,41,38 C. 25,15,6 D. 25,38,41(【答案】B【解析】本題考查二分查找。a種一共10個元素,下標從0到9,畫出二叉樹,第一個訪問的一定是a[5]即30,因此排除CD選項。A選項,僅訪問a[5]和a[3],從圖中看出是不可能的。)10.定義如下函數:def DK(n):if n<8:(#①)return str(n)else:rm=str(n%8)return rm+DK(n//8)以下關于該函數的說法正確的是A.該函數使用了枚舉算法B.DK(43)返回的值為"53"C.該函數的功能是將十進制數 n 轉換為八進制數D.調用該函數時,無論 n 為任何正整數值,①處語句均只執行 1 次(【答案】D【解析一】本題考查遞歸算法。B選項,DK(43)-->3+DK(5)-->35。C選項,43的八進制應該是53,所以功能是轉換成八進制的逆結果。【解析二】)臺州市技術選考試題 第 4 頁 共 15 頁(本題考查遞歸算法的相關知識。A選項該函數使用了遞歸算法不屬于枚舉算法,A選項錯誤;B選項“DK(43)”返回值是35,B選項錯誤。C選項該函數并沒有實現十進制轉八進制的功能,比如“DK(43)”轉成八進制應該是53,但結果卻是35,C選項錯誤;故答案選D。D選項中①處語句屬于終止遞推的邊界語句,故只執行一次。)11.利用冗余壓縮的方法對字符串進行壓縮,例 如字符串“aabbbcccd” ,壓縮后“a2b3c3d1”。實現上述壓縮功 能的 Python 程序如下:s=input("請輸入長度大于 1 的待壓縮字符串:")ys=s[0]; k=1for i in range(1,len(s)):print("壓縮后的結果為:",ys)在程序方框處應填入的代碼是A.if s[i]==s[i- 1]:k+=1else:ys=ys+st(k)+s[i]k=1if i==len(s)-1:ys+=str(k)C.if s[i]==s[i- 1]:k+= 1elifi!=len(s)- 1:ys=ys+st(k)+s[i]k= 1else:ys+=str(k)B.if s[i]==s[i- 1]:k+=1else:ys=ys+st(k)+s[i]k=1if i==len(s)-1:ys+=str(k)D.if i!=len(s)- 1 and s[i]!=s[i- 1]:ys=ys+st(k)+s[i]k= 1elif s[i]==s[i- 1]:k+= 1else:ys+=str(k+1)(【答案】B【解析一】本題考查字符串的壓縮。A選項,最后一串字符都相同,else語句不執行,ifi==len(s)-1就無法執行。C選項,例如aab情況,最終i=2時,遇b字符,執行運行else語句,ys結果是a2,無法給出b字符。D選項,ys+=str(k+1)錯誤,k才表示字符的個數。【解析二】本題考查棧字符串壓縮的相關知識。本題雖然說是一個字符串壓縮的問題,但其實是一道對分支結構if語句理解的問題。解本題有一個關鍵問題就是對最后連續相同字符怎么處理,例如字符串aabbb進行壓縮后是a2b3,當i遍歷到最后一個元素b的時候,發現和前一個元素b相等,由于ACD選項均只使用了一個if語句來做判斷,這樣只會有一個入口,)臺州市技術選考試題 第 5 頁 共 15 頁就是 k+1,而不再對 ys進行累加。只有 B 選項在最后進行 k+1 以后,再去用一個 if 語句判斷是否遍歷到最 后一個元素了,如果是則對 ys 進行累加,故 B 選項正確。12.有如下 Python 程序段:s=input("請輸入一個僅由小寫英文字母組成的字符串:")st=[""]*len(s); top=-lt=[-1]*26for i in range(len(s)):id=ord(s[i])-97if t[id]==- 1:top+= 1st[top]=s[i]t[id]=topelse:first=t[id]while top>=first and top!=-1:num=ord(st[top])-97t[num]=- 1; top-= 1print(st[:top+1])若從鍵盤輸入的值為"hellopython" ,則輸出的值為A.['o','n']B.['h','e','n']C.['h','e','l','o','p','y','t','n']D.['h','e','o','p','y','t','h','o','n'](【答案】A【解析一】本題考查棧。t[id]表示26個字母中第id個字母出現在棧中的最后位置。當某字母未出現時,入棧,并將在棧中的最后位置記錄在t中。否則將比該字符在棧中位置之后(包含自己)的元素全部出棧,并將t值設置為-1。根據上述思想,棧的變化是[h,e,l]-->[h,e]-->[h,e,o,p,y,t]-->[]-->[o,n]。【解析二】本題考查棧基本操作的相關知識。本題算法思想是將字母入棧的同時記錄字母的狀態,如果出現重復字母入棧的情況,則開始出棧,一直出棧到重復字母本身,或者棧內為空為止。例如字符串“hellopython”,首先字母“h”、“e”、“l”入棧,遇到重復字母“l”則出棧一次,然后繼續入棧“o”、“p”、“y”、“t”,遇到重復字母“h”則全部出棧,最后入棧字母“o”、“n”程序結束,故答案選A。詳解如下:)臺州市技術選考試題 第 6 頁 共 15 頁二、非選擇題(本大題共 3 小題,其中第 13 小題 8 分,第 14 小題 8 分,第 15 小題 10 分)13.小峰做了一個“搭建學生寢室管理系統”的實驗,該系統可通過人臉識別、指紋識別、校園卡等方式模 擬進出寢室管理,并將進出數據發送給服務器。通過瀏覽器可以查看學生在寢、離寢情況。小峰選擇的 硬件有:智能終端、IoT 模塊、攝像頭、指紋采集儀、射頻識別設備、進出口閘機、服務器等。該系統 結構示意圖如第 13 題圖所示,其中 Web 服務器端程序采用 Flask Web 框架開發。第 13 題圖(1)下列硬件設備中,屬于執行器的有 (單選,填字母: A.攝像頭 / B.指紋采集儀 / C.射頻識別設備 / D.進出口閘機)。(2)下列關于該系統應用軟件的網絡架構,說法正確的是 (單選,填字母:A.客戶端無需安裝專 用軟件,升級維護方便 / B.對服務器要求較低 / C.能夠降低系統通信開銷)。(3)下列功能需要在服務器端程序中實現的是 (多選,填字母:A.原始指紋數據的采集 / B.在 數據庫中查找指紋特征數據 / C.閘機的開關 / D.根據瀏覽器的請求返回數據)。(注:全部選對的得 2 分,選對但不全的得 1 分,不選或有選錯的得 0 分)(4)小峰基于 Flask Web 框架編寫服務器端程序,部分代碼如下。編寫完后,若要通過瀏覽器獲取視圖 函數 entry()返回的頁面,則訪問的 URL 是 http:// 。#導入 Flask 框架模塊及其它相關模塊,代碼略app= Flask(__ name__ )@app.route('/ ')def index():#在模板文件上顯示從數據庫讀取的入寢、離寢學生數據,代碼略@app.route('/dorm', methods=['GET', 'POST')def entry():#從數據庫讀取對應班級學生的在寢、離寢數據,并返回頁面,代碼略#服務器其它功能,代碼略臺州市技術選考試題 第 7 頁 共 15 頁if_name_ =='_main_'app.run(host = ' 10.16.1.18', port = 8080)(5)小峰對系統進行動態測試,使用校園卡刷卡,閘機能正常打開,在瀏覽器中查看系統首頁,頁面中 標題、表格等內容能正常顯示,但卻未顯示刷卡數據,刷新后仍不變(Web 服務器數據庫的數據讀寫 功能正常)。從服務器端的程序角度說明造成上述問題的原因有 、 (注:回答 2 項,1 項正確得 1 分)。(【答案】(1)D(1分)(2)A(1分)(3)BD(2分)(4)10.16.1.18:8080/dorm(2分)(5)①index模塊(主頁路由對應的模塊)中從數據庫中讀取數據代碼有誤②index模塊(主頁路由對應的模塊)中將參數傳遞給模板文件的代碼有誤③主頁模板文件中,顯示服務器傳遞的數據代碼有誤④其他模塊中,將在宿、離宿數據寫入數據庫代碼有誤(只說代碼有誤不給分,需要指出具體哪個位置及哪個內容的代碼有誤)(2分)【解析】本題考查信息系統搭建的綜合知識。(1)執行器是負責輸出的硬件設備,選項中ABC均屬于輸入設備,只有進出口閘機屬于輸出設備,故選D。(2)根據題干中:通過瀏覽器可以查看學生在寢、離寢情況,可知該系統采用B/S開發模式,因此不需要安裝客戶端程序。而選項BC是C/S開發模式的特點,故選A。(3)指紋數據的采集和閘機的開關,只需要通過智能終端的程序控制即可實現。在數據庫中查找指紋特征數據、根據瀏覽器的請求返回數據,這兩個功能都需要在Web服務器的配合下使用。(4)由于路由和視圖函數是配合使用的,根據代碼可知,視圖函數entry()的前面就是其路由的子頁面“/dorm”,然后根據IP地址(host)和port端口號,可以確定答案。(5)只要理由合理均可給分,但須指出具體原因。)14.小明通過調查問卷收集了食堂滿意度情況數據,保存在“data.csv”文件中,如第 14 題圖 a 所示。第 14 題圖 a第 14 題圖 b臺州市技術選考試題 第 8 頁 共 15 頁第 14 題圖 c為統計分析每個調查項目不同選項的人數及不滿意率,編寫 Python程序。回答下列問題:(1)統計每一項調查內容的總票數、滿意、一般及不滿意人數,程序運行結果如第 14 題圖 b 所示,請在劃線處填入合適的代碼。import pandas as pdimport matplotlib.pyplot as pltplt.rcParams["font.sans-serif"]=["SimHei"] df=pd.read_csv("data.csv",encoding="utf-8")cols=df.columns[1:]poll=len(df)#導入 pandas 模塊#導入 pyplot 模塊#設置圖表顯示中文字體#讀取 csv 文件中的數據data={("調查項目":[],"總票數":[],"滿意":[],"一般":[],"不滿意":[]}for colname in cols:dfc=df.groupby( ① ,as_index=False)["序號"].count()data["調查項目"].append(colname)data["總票數"].append(poll)for j in dfc.index:name=dfc.at[j,colname]data[name].append( ② )df2=pd.DataFrame(data)print(df2)(2)計算每個項目的“不滿意率”(=“不滿意”/“總票數” * 100) ,并使用柱形圖分析每個項目的“不滿意率” 情況,如第 14 題圖 c 所示,請在劃線處填入合適的代碼。df2["不滿意率(%)"]= ①x= ②y=df2["不滿意率(%)"]plt.figure(figsize=(8,4))plttitle("食堂調查問卷不滿意率(%)情況")plt.bar(x,y,label="不滿意率(%)")plt.legend()(plt.show()【答案】(1)①colname(2分)②dfc.at[j,"序號"]或dfc["序號"][j]或dfc.序號[j](2分)(2)①df2["不滿意"]/df2["總票數"]*100或df2["不滿意"]/poll*100或df2.不滿意/df2.總票數*100或df2.不滿意/poll*100或其它等價答案(2分)②df2["調查項目"]或df2.調查項目(2分)【解析一】本題考查pandas數據處理)臺州市技術選考試題 第 9 頁 共 15 頁(1) ① 根據 14 題圖 b 的結果,再結合代碼(本以為會用篩選),遍歷每個項目,進行分組后計數,可 以得到相應的結果。所以這里填的是 colname② "滿意","一般","不滿意" 的相應數據,存放在"序號"列對應的位置:dfc.at[j,"序號"],這里不是更改 數據,dfc["序號"][j] 或 dfc.序號[j]亦可。(2) ① 利用其中二列的數據,就可以得到新增列的相應數據:df2["不滿意"]/df2["總票數"]*100 ② 根據第 14 題圖 c ,這里應該是:df2["調查項目"]【解析二】本題考查 pandas及字典、列表等相關知識。(1)①本題的幾個關鍵變量形式如下:cols ,保存 df 中除第一列以外的所有列標題,即:[‘飯菜質量’,’飯菜價格’,’菜品花樣’,’餐廳環境’,’服務質量’, ’ 餐廳整體’]data={"調查項目" :[],"總票數":[],"滿意":[],"一般":[],"不滿意":[]}用于存放項目名稱,及各項目分類統計后的計數值。部分代碼解析如下:for colname in cols: #遍歷 cols 中的每個列標題dfc=df.groupby( ① ,as_index=False)["序號"].count() #按相應列標題分組計數data["調查項目"].append(colname) #將本次統計的項目追加到字典 datadata["總票數"].append(poll) #data 中追加該項目的總票數for j in dfc.index: #遍歷分組后數據行索引name=dfc.at[j,colname] #獲取 dfc 中第j 行 colname 列的值,如“一般”等data(name.append( ② ) #相應統計結果追加到字典df2=pd.DataFrame(data) #將字典轉換為 DataFrame 對象。①空依題意,應按各列分別進行分組計數,因此外循環依次遍歷項目,每取一個項目 colname 就以它為 分組字段進行計數,①處填 colname②以 name 為鍵,追加該項目的計數結果,②處填:dfc.at[j,”序號”],注意此時的序號列是統計結果,例 如, 以“飯菜質量”為分組字段進行分組后,統計結果如下圖所示:最終字典 data 中數據形式如下:(2) ①由題干提示可知,此空填:df2["不滿意"]/poll*100② 觀察圖 c 可知,x 軸數據來自“調查項目” ,填:df2["調查項目"]本題統計時沒有按常理出牌,對不常操作的同學來講,要描述出不同變量的結構比較困難。也提醒各 位同學,pandas 模塊的復習要理論與實踐相結合。15.某工廠的業務較多,每個業務 i 都有對應的截止時間ti 以及收益 vi ,工廠每天最多能完成 k 個業務,且 每個業務所需的加工時長相同。由于業務量多,有時候無法完成所有的業務,因此工廠管理者需要對一 段時間內的業務進行規劃安排, 以實現工廠累計收益的最大化。例如工廠 3 天內的業務明細如第 15 題圖 a 所示,已知工廠每天能夠完成的業務量 k 為 2 。為了實 現 3 天的累計收益最大化 ,工廠安排的業務方案如第 15 題圖 b 所示,這樣工廠能夠獲得最大累計收 益為 105。臺州市技術選考試題 第 10 頁 共 15 頁編寫程序,實現在任意時間段內,根據每個業務的截止時間和收益,統計工廠在該時間段內的最大 累計收益。第 15 題圖 a 第 15 題圖 b請回答下列問題:(1)如第 15 題圖 a 所示,若工廠每天能夠完成的業務量 k 為 3,則工廠在 3 天內獲得的最大收益為 。(2)定義如下 insert(lst,head,pos)函數,參數 lst 是一個由列表模擬的鏈表結構數據,其每個節點由收益數 據和指向下一個位置的指針組成;參數 head 是其中一條鏈表的頭指針,由該指針構建的鏈表已經按 收益數據升序排列;參數 pos 是某個節點的指針。函數功能是將 pos 節點插入到 head 指針指向的鏈 表中,并保持鏈表按收益數據升序排列,最后返回頭指針數據。def insert(lst,head,pos):p=headwhile p!=- 1 and lst[p][0]q=pp=lst[p][1]if p==head:lst[pos][1]=headhead=poselse:lst[pos][1]=p▲return head①若函數加框處代碼誤寫為“lst[p][0]②請在劃線處填入合適的代碼。(3)實現對每個業務完成時間的合理安排,使得工廠獲得最大累計收益的部分 Python 程序如下,請在劃線處填入合適的代碼。def pushlst(info,lst,cur,v):if info[cur][1]lst.append([v,-1]) pos=len(lst)- 1if info[cur][0]==- 1: ①#cur 表示當前時間#安排在當天的業務數量未滿#列表 lst 追加一個元素臺州市技術選考試題 第 11 頁 共 15 頁else:info[cur][0]=insert(lst,info[cur][0],pos)info[cur][1]+=1else:pos=info[cur][0]ifv#如果 cur>0,嘗試將當前業務提至前一天完成,代碼略else:tmpv=lst[pos][0] #獲取原安排中收益最少的業務收益lst[pos][0]=vp=lst[pos][1]info[cur][0]=insert(lst, ② ,pos)#如果 cur>0 ,嘗試將原安排中收益最少的業務提至前一天完成,代碼略'''先輸入規劃安排的天數 n 和每天能夠處理的最大業務量 k,代碼略。依次輸入 m 個業務的截止時間 t(t ≤n )和收益 v ,存儲在數組 tran 中,如:[[1,25][1,10][2,15]],表 示共有 3 個業務,第一個業務的截止時間為 1,收益為 25 …… ,代碼略'''info=[]; lst=[]; k=0for i in range(n):info.append([-1,0])while kcur=tran[k][0]; v=tran[k][1] pushlst(info,lst,cur- 1,v)k+=1s=0for i in range(n):p=info[i][0]while p!=- 1:s+= ③p=lst[p][1]print("最大收益為:",s)#列表 info 追加一個元素#獲取截止時間和對應收益(【答案】(1)135(1分)(2)①B(1分)②lst[q][1]=pos(2分)(3)①infor[cur][0]=pos或infor[cur][0]=len(lst)-1(2分)②p(2分)③lst[p][0](2分)【解析一】本題綜合考查單鏈表的初始化和插入等操作。第(1)題根據題意模擬,先將所有業務按戒指時間分組并排序,如下表所示:截止時間任務收益)臺州市技術選考試題 第 12 頁 共 15 頁1 10 ,15 ,252 15 ,20 ,25 ,303 5(當k=3時,嘗試將第2天中收益最小的業務15提前到第1天完成,即頂替第一天中收益為10的業務,如)(下表所示:)截止時間 任務收益1 10 ,15 ,15 ,252 15 ,20 ,25 ,303 5(如此,每天最多完成3個業務,最大收益為當下所有業務收益之和135。)(第(2)題的代碼功能相對獨立,考察在有序鏈表中數據的插入,并維護鏈表有序的特性,是常見的考察方)(向。第①問加框處代碼改寫后,由于不再判斷p!=-1,即無法保證該節點是否存在。在遍歷的過程中若鏈表)(為空,或訪問尾節點后繼續向后遍歷都會出現這種情況。在所有選項中,只有B選項表示的鏈表,要求將)(節點pos=0、值為5,插入到頭節點head=2的有序鏈表2→3→4→中會出現遍歷結束后p=-1的情況,因此)(答案為B;第②問是常規的節點插入,當p!=head時,滿足q→p的關系,即p是q的后繼、q是p的前驅。)While 循環結束后 lst[q][0](即答案為lst[q][1] =pos。)(第(3)題考察多鏈表數組的維護。info數組存儲了n個鏈表的頭節點索引和鏈表長度,info數組的結構如)(下:info=[[head1,len1],[head2,len2],… ,[headn,lenn] ],其中info[i][0]表示截止時間為i的所有業務所組成)(鏈表的頭節點索引(鏈表按業務收益升序,即該索引指向收益最低的業務),info[i][1]表示已記錄了截止時)(間為i的業務的數量,最大為k。在該結構下,第①空鏈表為空時,直接將該節點作為頭節點插入到鏈表中,)答案 info[cur][0] = pos;第②空刪除原頭節點之后, 以頭節點的后繼索引作為該鏈表新的頭指針執行 pos 節點的插入, 由于 p= lst[pos][1](pos 是原鏈表的頭指針),因此②答案為 p;第③空依次遍歷 n 個鏈表累加(收益,答案lst[p][0]。)臺州市技術選考試題 第 13 頁 共 15 頁【解析一】本題考查基本數據結構鏈表的基礎操作。(1)根據截止時間梳理各個業務,如下表所示業務序號 截止時間 收益 vi 完成時間 業務序號 截止時間 收益 vi3 1 25 第一天完成 3 1 255 1 10 2 2 157 1 15 7 1 154 2 30 第二天完成 4 2 306 2 20 6 2 208 2 25 8 2 251 3 5 第三天完成 1 3 5表 1 表 2當 k=3 時,截止時間為 2 的業務多一個,剔除序號 2 的業務并將其安排到前一天,替換掉收益最低的序號 為 5 的業務。得到總的收益率最大為 135(2)①根據題干描述,insert 函數的功能是將 pos節點插人到 head 指針指向的升序鏈表中, while p!=- 1 and lst[p][0]q=pp=lst[p][1]上述代碼段的功能用來遍歷鏈表,查找插入 pos 節點的位置。如將循環條件改為“lst[p][0l② 第二空所在的代碼段實現的功能是將 pos節點,插入到鏈表,具體解析如下.......if p==head: #說明 pos 節點插入的 head 之前lst[pos][1]=head #pos 節點的指針域指向 headhead=pos #更新 head 的位置else:lst[pos][1]=p #在 q 、p 之間插入 pos 節點,pos 節點的指針域指向 plst[q][1] =pos #q 節點的指針域指向 pos..........(1) 在第①②空所在的代碼段中, 自定義函數 pushlst 的功能將每天的業務以升序鏈表的形式存儲。n 天的業務生成 n 個鏈表,info[cur][0]表示每個鏈表的頭指針,infoc[cur][1]表示每天安排的業務數量。具體代 碼解析如下:def pushlst(info,lst,cur,v):#cur 表示當前時間if info[cur][1]lst.append([v,- 1])#列表 lst 追加一個元素pos=len(lst)- 1 #pos 表示新節點的位置if info[cur][0]==- 1: #表示第 cur+1 天的鏈表沒有安排業務info[cur][0] = pos #將 pos 節點作為當前鏈表的頭結點else:info[cur][0]=insert(lst,info[cur][0],pos) #否則,將將 pos 節點插入到 lst 鏈表 info[cur][1]+=1 #第 cur+1 天的業務數量+1else: #表示第 cur+1 天完成的任務已經達到 k 個pos=info[cur][0] #pos 記錄第 cur+1 天業務鏈表頭指針臺州市技術選考試題 第 14 頁 共 15 頁(ifv<lst[pos][0]:#v<lst[pos][0]表面當前業務的效益少于頭結點業務的效益#如果cur>0,嘗試將當前業務提至前一天完成,代碼略else:tmpv=lst[pos][0] #獲取原安排中收益最少的業務收益lst[pos][0]=v #修改pos結點業務的效益p=lst[pos][1] #p指向下一個節點info[cur][0]=insert(lst,p,pos) #從p節點開始遍歷,將pos節點插入第cur+1天的鏈表中#如果cur>0,嘗試將原安排中收益最少的業務提至前一天完成,代碼略③最后一空所在代碼段用來計算n天的總效益,p指向每一鏈表的頭指針,通過遍歷每一個鏈表,s記錄已經安排的所有業務的效益和,所以答案為lst[p][0]。)臺州市技術選考試題 第 15 頁 共 15 頁 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫