按行按列求和
约 10 分钟
把二维数组想成一张表格,a[i][j] 表示第 行、第 列的那个数。求某一行的和,就固定行号 不动,让列号 从 0 扫到 ,一路累加;求某一列的和正好反过来,固定列号 ,让行号 从 0 扫到 。判断哪个下标不变是关键——不变的那个,就是你要求和的"那一行/那一列"的编号。
一次算出所有行、所有列的和:
int a[105][105], n, m;
// 求每一行的和
for (int i = 0; i < n; i++) {
int s = 0;
for (int j = 0; j < m; j++) s += a[i][j];
cout << "第" << i << "行和=" << s << "\n";
}
// 求每一列的和:外层枚举列
for (int j = 0; j < m; j++) {
int s = 0;
for (int i = 0; i < n; i++) s += a[i][j];
cout << "第" << j << "列和=" << s << "\n";
}
两层循环把每个元素访问一遍,时间是 。常见坑:一是行列下标写反,求列和时忘了外层应该枚举列;二是把 a[i][j] 里的 、 顺序颠倒。做题先在草稿上标清楚" 管行、 管列",就不会乱。
小纸条
求第 2 行的和,哪个下标是固定的?
登录 后可看答案