首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ACM 題目解析:最大距離(山東理工大學 1597)

     編輯:關於C語言

題目大意

輸入 n (1≤n≤100) 個整數(範圍 -10000~10000),求最大值與最小值之差(即最大距離)。

輸入輸出範例

輸入:
5
3 10 -6 20 -10

輸出:
30

說明:最大值 20,最小值 -10,差值 30。

解法:單次掃描 O(n)

維護 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,程式仍正確運作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved