輸入 n (1≤n≤100) 個整數(範圍 -10000~10000),求最大值與最小值之差(即最大距離)。
輸入: 5 3 10 -6 20 -10 輸出: 30
說明:最大值 20,最小值 -10,差值 30。
維護 max_val 與 min_val,遍歷更新,最後相減。無需儲存陣列,空間 O(1)。
#include <stdio.h>
int main() {
int n, x, max_val = -10001, min_val = 10001;
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;
}
| 版本 | 特點 | 優缺點 |
|---|---|---|
| 版本一 | 單次掃描,直接更新極值 | 最佳,碼短、效率高 |
| 版本二 | 先存陣列,再找最大,再複製陣列找最小 | 多餘複製,且有 bug(b[i] 誤寫為 b[i]) |
| 版本三 | 存陣列,分兩次迴圈找最大最小 | 清晰易讀,空間 O(n) 可接受 |
max_val 應設為比最小可能值更小(如 -10001),min_val 設為比最大可能值更大(如 10001)。scanf 自動處理空白。n=1,最大距離為 0,程式仍正確運作。