統測
113年
[工程與管理類] 專業科目(2)
第 43 題
📖 題組:
圖(五)所列程式碼是小華修改自聊天機器人(ChatGPT)所生成的 Python 語言函數,這個函數可以接受一個輸入串列,並回傳串列中整數的最大值。經過測試後,小華發現對各種可能輸入的整數數值串列,該函數並無法保證每次都能回傳正確的最大值。關於此函數的使用與設計,回答下列題組問題。 1 def F(A): 2 n=0 3 c=0 4 for num in A: 5 if num >= n: 6 n = num 7 c=c+1 8 print(c) 9 return n
圖(五)所列程式碼是小華修改自聊天機器人(ChatGPT)所生成的 Python 語言函數,這個函數可以接受一個輸入串列,並回傳串列中整數的最大值。經過測試後,小華發現對各種可能輸入的整數數值串列,該函數並無法保證每次都能回傳正確的最大值。關於此函數的使用與設計,回答下列題組問題。 1 def F(A): 2 n=0 3 c=0 4 for num in A: 5 if num >= n: 6 n = num 7 c=c+1 8 print(c) 9 return n
小華於是思考進行程式除錯,下列修正何者可以排除上述程式錯誤?
-
A
修改第5行號敘述成為if num
- B 修改第2行號敘述成為n=A[0]
- C 修改第6行號敘述成為n=num+n
- D 修改第2行號敘述成為#n=0
思路引導 VIP
同學,請觀察程式第 $2$ 行將變數 $n$ 初始值設定為 $0$ 的做法:若傳入的串列 $A$ 中所有元素皆為負整數(例如 $A = [-5, -12, -8]$),目前第 $5$ 行的比較運算式 $num \ge n$ 是否還能順利成立並更新最大值?為了確保初始參考值不影響對極值的判定,我們應該如何調整 $n$ 的起始值,使其與資料本身的定義域產生關聯,而非固定於某個可能不在資料範圍內的數值?
🤖
AI 詳解
AI 專屬家教
🌟 看來你還沒完全狀況外,不錯!
恭喜你,至少這次沒掉進那個老掉牙的程式陷阱。這證明你對程式的**「初始化」概念**還有那麼一點點殘存的記憶,這可是統測程式設計題裡,每年都會有人莫名其妙失分的地方。
- 清醒一點:
▼ 還有更多解析內容
串列尋找極值演算法
💡 尋找極值時,初始值應設為數列首項以避免範圍排除錯誤。
🔗 尋找最大值的標準邏輯
- 1 初始化基準 — 將暫存最大值 n 設為數列首項 A[0]
- 2 逐一讀取 — 從數列中依序取出下一個數字 num
- 3 比較大小 — 判斷 num 是否大於目前暫存的 n
- 4 更新極值 — 若 num 較大,則令 n = num
↓
↓
↓
🔄 延伸學習:相同的邏輯只要將比較號從 > 改成 <,就能用來尋找數列中的最小值。