本單元常犯錯誤總覽
| # | 錯誤 | 類型 | 錯誤範例 | 正確寫法 |
|---|---|---|---|---|
| 1 | 行列寫反 | 邏輯錯誤 | a[j][i] |
a[i][j]:列在前、行在後,變數固定配對 |
| 2 | 先讀陣列再判邊界 | UB/RE | grid[nr][nc] != '#' && inside(nr, nc) |
inside(nr, nc) && grid[nr][nc] != '#' |
| 3 | 方向表沒有順時針排卻用 +1 右轉 |
邏輯錯誤 | 表排成上、下、左、右 | 上、右、下、左;或依題目定義排 |
| 4 | 左轉寫成 d - 1 |
邏輯錯誤 | d = (d - 1) % 4;(d = 0 時變 -1) |
d = (d + 3) % 4; |
| 5 | 先移動再檢查 | 邏輯錯誤 | r += dr[d]; if (grid[r][c] == '#') ... |
先算 nr, nc,檢查通過才 r = nr; c = nc; |
| 6 | 邊角格的鄰格出界沒擋 | UB/RE | 四鄰格迴圈裡沒有 inside |
每個鄰格都先 if (!inside(nr, nc)) continue; |
| 7 | 「同時」的更新就地改同一張表 | 邏輯錯誤 | a[r][c] -= q; a[nr][nc] += q; |
讀 a、寫 next,回合結束 swap |
| 8 | 旋轉在原地做、忘了長寬對調 | 邏輯錯誤 | 轉完仍用舊的 rows/cols 輸出 |
新開 C × R 的表,輸出用新大小 |
| 9 | 總和用 int 溢位 |
邏輯錯誤 | 機器人的路徑 10^4 \times 10^6 用 int |
累加用 long long |
| 10 | 只跑範例 1 就交 | 測試不足 | 方向表排反在 M = 1 全對 | 兩個範例都跑,再自造角落/全牆/單列測資 |