題組內容
三、請用下列程式回答下列問題。(每小題 5 分,共 25 分)
⑵若依序輸入 1, 2, 3, …, 99, 0,請說明 num[0]值為何。
詳解 (共 3 筆)
詳解
reorder會將比較大的數往前放
所以是99
想了想 這段程式碼有些錯誤 while條件設定為 i != 0
目的應該是只有一個數時不用進入reorder
但!! 他把 i = i+1 跟第二個scanf都放在while中
也就是說while一次都不會進去
所以整個陣列只會讀到第一個輸入的值
也就是1
還有reorder中也把num誤打成book
好奇出題老師寫出這段code的時候都沒有先跑跑看嗎
詳解
因一開始i已經等於0,但while迴圈裡的(i != 0),故迴圈永遠不會執行,故num[0] = 1;
詳解
這段程式碼的主要功能是通過遞迴函數 reorder 在輸入過程中重新排序陣列 num。每次輸入一個新的數字後,就會調用 reorder 函數來對 num 進行排序。函數 reorder 的作用是根據一個最大堆(max-heap)的性質對數據進行重新排序。
從給定的程式碼中,當輸入一系列正整數 1, 2, 3, …, 99, 0 時,num 陣列在每次輸入後都會調用 reorder 進行調整。因為在輸入 0 之前,所有的 99 個正整數都已經輸入了,所以我們可以假定 reorder 函數會將這些數字調整成最大堆的形態。
在最大堆中,堆的根節點(即 num[0])是最大元素。所以在輸入這些數字並重排序後,num[0] 的值應該是最大的那個數字,也就是 99。然而,由於我們沒有 reorder 函數的全部細節,這是一個基於最大堆特性的假設。
如果我們確認這個假設並假設 reorder 函數正確地實現了最大堆的重排序,那麼輸入數字 1 到 99 之後,num[0] 應該會是 99。