C++ 竞赛入门
数组
数组补充:二维数组
本节学会什么
- 用二维数组表示表格和棋盘
- 通过两个下标访问“第几行第几列”
- 用嵌套循环遍历二维数组
为什么需要它
一维数组适合一排数据,座位表、地图和矩阵却有行和列两个方向。二维数组就是“每个元素仍然是数字,但位置同时由行号和列号确定”的表格。
最小可运行示例
读入一个 n 行 m 列的表格,输出所有元素的和:
#include <iostream>
int main() {
const int max_n = 100;
const int max_m = 100;
int n, m;
int grid[max_n][max_m];
std::cin >> n >> m;
int sum = 0;
for (int row = 0; row < n; row += 1) {
for (int col = 0; col < m; col += 1) {
std::cin >> grid[row][col];
sum += grid[row][col];
}
}
std::cout << sum << '\n';
return 0;
}
grid[row][col] 先定位第 row 行,再定位这一行的第 col 列。若有 n 行、m 列,行下标范围是 0 到 n - 1,列下标范围是 0 到 m - 1。
关键过程与易错点
- 定义
int grid[3][4];时,第一维是行数,第二维是列数;它共有3 * 4个元素。 - 处理整张表通常需要两层循环。外层控制行,内层控制列,读入和输出的顺序都要和题目一致。
- 二维数组的两个下标都要检查边界。
grid[n][0]和grid[0][m]都不合法。 - 只需记住“行、列”的含义,不要把
i、j当作魔法字母。复杂题中使用row、col更不容易写反。
动手检查
读入一个 3 行 3 列的整数表格,输出主对角线 grid[0][0]、grid[1][1]、grid[2][2] 的和。
再输出每一行的和:每进入一行时把 row_sum 重置为 0,在内层循环中累加,内层结束后输出。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5730:显示屏 | 题解 | 将字符输出组织成固定的行和列。 |
| 巩固 | 洛谷 P5729:工艺品制作 | 题解 | 练习多维下标、嵌套循环与边界。 |