【题目链接】
ybt 1121:计算矩阵边缘元素之和
OpenJudge NOI 1.8 03:计算矩阵边缘元素之和
【题目考点】
1. 二维数组
【解题思路】
解法1:遍历外圈
- 一个m行n列的矩阵,其边缘元素分别为:第1行,最后一行(第m行),第1列,最后一列(第n列)。
- 行和列之间有交点,交点在矩阵的四个角。所以在遍历第1行,第m行元素后,在遍历列元素时,从第2行遍历到第n-1行,避开矩阵四角的位置。这样就避免了重复计算。
- 矩阵若只有1行,那么第1行和第m行只需要加一次。矩阵若只有1列,第1列和第n列只需要加一次。
解法2:遍历矩阵
遍历整个矩阵,选择其中满足条件的元素进行相加
【题解代码】
解法1:遍历外圈
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[101][101], m, n, sum = 0;//m行n列
cin >> m >> n;
for(int i = 1; i <= m; ++i)
for(int j = 1; j <= n; ++j)
cin >> a[i][j];
for(int i = 1; i <= m; ++i)//第1列和第n列加和
{
sum += a[i][1];
if(n != 1)//如果矩阵不是只有1列
sum += a[i][n];
}
for(int j = 2; j <= n - 1; ++j)//第1行和第m行,除去两端元素后,加和
{
sum += a[1][j];
if(m != 1)//如果矩阵不是只有1行
sum += a[m][j];
}
cout << sum;
return 0;
}
解法2:遍历矩阵
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m, n, a[105][105], s = 0;
cin >> m >> n;
for(int i = 1; i <= m; i++)
for(int j = 1; j <= n; ++j)
{
cin >> a[i][j];
if(i == 1 || i == m || j == 1 || j == n)
s += a[i][j];
}
cout << s;
return 0;
}