輸入 n(1 ≤ n ≤ 200)與 n 個整數,輸出最大值。輸入範例:4 1 2 3 4 → 輸出 4。
#include#define MAX_N 200 int main() { int n, a[MAX_N]; if (scanf("%d", &n) != 1 || n <= 0 || n > MAX_N) return 1; int max_val; scanf("%d", &max_val); // 讀第一個數初始化最大值 for (int i = 1; i < n; ++i) { int x; scanf("%d", &x); if (x > max_val) max_val = x; } printf("%d\n", max_val); return 0; }
n 合法性驗證,防止陣列越界。scanf 回傳值檢查,防止格式錯誤導致未定義行為。int main() {
int n, x, max_val;
if (scanf("%d %d", &n, &max_val) != 2) return 1;
for (int i = 1; i < n; ++i) {
if (scanf("%d", &x) != 1) break;
if (x > max_val) max_val = x;
}
printf("%d\n", max_val);
return 0;
}
空間複雜度降為 O(1),適合超大 n 或管道串流輸入。
| 錯誤代碼 | 問題 | 修正 |
|---|---|---|
int max = 0; | 若全為負數,結果錯誤 | 用首元素初始化 |
for(i=0;i<=n;i++) | 多讀一個數,越界 | i < n |
scanf("%d", a); | 缺 &,傳值而非址 | &a[i] |
無 scanf 回傳檢查 | 輸入異常時未定義行為 | 檢查回傳值 |
#pragma omp parallel for reduction(max:max_val)。_mm_max_epi32 等內建函數,4/8 元素並行比較。「從 n 個數找最大值」是陣列遍歷、邊界處理、輸入驗證、初始化策略的綜合考驗。掌握首元素初始化、單次掃描、輸入檢查、空間優化四大核心技巧,即可應對所有變體。面試時主動說明「為什麼不初始化為 0/INT_MIN」展現工程思維。