本單元常犯錯誤總覽
| # | 錯誤描述 | 錯誤類型 | ✗ 錯誤寫法 | ✓ 正確寫法 |
|---|---|---|---|---|
| 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) |