阿摩線上測驗 登入

申論題資訊

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

題組內容

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

申論題內容

⑵若依序輸入 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的時候都沒有先跑跑看嗎

詳解 提供者:able9514476
因一開始i已經等於0,但while迴圈裡的(i != 0),故迴圈永遠不會執行,故num[0] = 1;
詳解 提供者:hchungw

這段程式碼的主要功能是通過遞迴函數 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。