阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 地特四等 程式設計概要#73697
科目:程式設計
年份:107年
排序:0

題組內容

三、請用下列程式回答下列問題。(每小題 5 分,共 25 分)5c1b2c8b1cb22.jpg

申論題內容

⑶若依序輸入 99, 98, …, 2, 1, 0,請說明 num[0]值為何。

詳解 (共 1 筆)

詳解 提供者:hchungw
在這個程式碼中,數字依序輸入 99, 98, ..., 2, 1, 0。每次輸入一個數字後,都會調用 reorder 函數。該函數檢查當前輸入的數字(位於索引 k)是否大於它父節點的數字(位於索引 k/2),如果是的話,就將它們交換。這類似於最大堆資料結構的插入操作。
給定輸入數字是逆序的(從最大開始到最小),每次輸入一個新數字時,它都會通過 reorder 函數上移至它正確的位置以維持最大堆的性質。這意味著在最大堆中,根節點(num[0])總是最大的元素。因此,在過程的任何階段,num[0] 都將保持為迄今為止輸入的最大數字。
由於第一個輸入的數字是 99,而且後面沒有任何數字大於它,reorder 函數會將其保持在陣列的開頭。隨後的每一個數字都比 99 小,並且 reorder 函數在這種情況下只會進行數字的下移操作(如果需要的話),以維持最大堆的結構。
因此,即使全部數字被輸入之後,num[0] 的值應該仍然是 99。輸入 0 之後,由於 while 循環的條件會變為假(因為 0 不等於 1),程序將不再進行任何操作,最終 num[0] 將保留值 99。