語法書 / AA 競程語法書 上冊 / 第六單元 / 本單元常犯錯誤總覽

本單元常犯錯誤總覽

# 錯誤描述 錯誤類型 ✗ 錯誤寫法 ✓ 正確寫法
1 索引超出範圍 UB(RE 或邏輯錯誤) int a[5]; cout << a[5]; cout << a[4];
2 用變數做陣列大小 編譯錯誤 int n; cin >> n; int a[n]; const int MAX_N = 100005; int a[MAX_N];
3 區域陣列未初始化就使用 UB(垃圾值) int a[10]; cout << a[0]; int a[10] = {}; 或開全域
4 1-base 存法沒多開一格 UB(越界) int a[100]; 卻存取 a[100] n + 1 格以上:int a[105];
5 搞混 0-base 與 1-base(差一格) Wrong Answer 題目位置從 0 數,卻從 a[1] 存起 先確認題目編號方式,再對齊存法(6.3
6 交換兩數沒用暫存變數 邏輯錯誤 a[i] = a[j]; a[j] = a[i]; int t = a[i]; a[i] = a[j]; a[j] = t;
7 大陣列在多測資迴圈內重複歸零 TLE while (t--) { int a[1000000] = {}; ... } 開全域+每組只清用過的前 n 格(6.5
8 宣告時塞一大串初值 執行檔過大 int a[1000000] = {1}; int a[1000000]; 之後用迴圈填值
9 搞混二維陣列的行列 邏輯錯誤 a[col][row] a[row][col]
10 const 變數未初始化 編譯錯誤 const int N; const int N = 100;
11 以為 = {1} 會把整個陣列填滿 1 邏輯錯誤 int a[2][3] = {1};(只有 a[0][0] 是 1) 全部歸零用 = {};要填別的值跑迴圈(6.9