d221-Add All
題目解析
這道題目要求我們將一系列的數字加起來,但每次加法操作的代價是兩個數字的總和。目標是使總加法代價最小化。這是一個經典的貪心算法問題,通常使用最小堆積(Min Heap)來解決,但此題用的是類似的方法。
解題方向
為了讓總加法代價最小,我們每次都應該選擇兩個最小的數字進行加法,這樣才能減少累積的代價。因此,我們首先對數字進行排序,並從最小的兩個開始加,每次計算新值後,再將其插入排序好的列表中,重複這個過程直到列表中只剩下一個元素。
程式解析
- 初始化輸入資料:我們首先讀入數字 N,表示數字的個數,並進行檢查,如果 N 為 0,則結束輸入。
- 排序列表:接下來,我們讀入所有數字並對其進行排序,使數字按從小到大的順序排列。這樣,我們每次可以很方便地取出最小的兩個數字。
- 進行加法操作:使用 for 迴圈執行 N-1 次操作。每次都從列表中取出兩個最小的數字,將它們相加並將其結果加入到總代價中。然後,將這個結果插入回列表並再次排序。
- 輸出結果:最後,當只剩下一個元素時,已經計算完所有的加法代價,並將結果輸出。
完整程式碼