二维数组的应用¶
下面处理 n 行 m 列,1 <= n, m <= 100,行列下标从 0 开始。
判断边框元素¶
第一行、最后一行、第一列、最后一列,都是边框。
用字符数组存一个空心图形,边框放 @,里面放空格。
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (i == 0 || i == n - 1 || j == 0 || j == m - 1) s[i][j] = '@';
else s[i][j] = ' ';
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) cout << s[i][j];
cout << '\n';
}
一行或一列的表格,每个位置都是边框。
每行、每列的最值¶
仍然用打擂台。下面的 a 已经读入,n、m 都至少是 1。
每行的最大值
int row_max[110];
for (int i = 0; i < n; i++) {
row_max[i] = a[i][0];
for (int j = 1; j < m; j++)
if (a[i][j] > row_max[i]) row_max[i] = a[i][j];
cout << row_max[i] << ' ';
}
每列的最小值
int col_min[110];
for (int j = 0; j < m; j++) {
col_min[j] = a[0][j];
for (int i = 1; i < n; i++)
if (a[i][j] < col_min[j]) col_min[j] = a[i][j];
cout << col_min[j] << ' ';
}
行最值,用这一行的第一个元素初始化;列最值,用这一列的第一个元素初始化。
标记数组¶
记录 (i, j) 这个位置是否访问过、是否处理过。