輸入 n (1≤n≤100) 個整數 (範圍 -10000~10000),求這批數的最大距離,即 最大值 − 最小值。
輸入: 5 3 10 -6 20 -10 輸出: 30 (∵ 20 - (-10) = 30)
只需維護兩個變數 max_val、min_val,一次迴圈完成:
#include#include int main(void) { int n, x; int max_val = INT_MIN; // 初始化為最小可能值 int min_val = INT_MAX; // 初始化為最大可能值 scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &x); if (x > max_val) max_val = x; if (x < min_val) min_val = x; } printf("%d\n", max_val - min_val); return 0; }
max=0, min=1000,輸入全負數或全超過 1000 會出錯。應用 INT_MIN/INT_MAX 或讀第一筆資料初始化。for(j=1; j 等寫法的邊界條件。| 版本 | 特點 | 評價 |
|---|---|---|
| 單趟掃描 | O(n) 時間、O(1) 空間、無陣列 | ✅ 最佳 |
| 陣列存儲 + 兩次掃描 | 先存陣列,再分別找最大/最小 | 可行但冗餘 |
| 陣列複製 + 掃描 | 複製陣列後再找最小值,甚至有 b[i] 寫錯成 b[j] 的 Bug | ❌ 易出錯 |
n 後,直接在迴圈中更新最大/最小值。#include 取得 INT_MIN/INT_MAX 作為安全初始值。max - min 即可,無需額外判斷正負。