----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I Got a Matrix!
题目
给定一个 n ∗ m 的矩阵 A,询问位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。
输入
第一行包含两个整数 n 和 m。
之后 n 行每行包含 m 个整数 Ai,j。
输出
共一行包含一个整数 ans,表示位于矩阵边缘的元素之和。
输入样例
3 3
3 4 1
3 7 1
2 0 1
输出样例
15
数据范围
对于 100% 的数据:n, m ≤ 100
思路
这道题就是一道模拟题,我们枚举矩阵的边,在一个一个加起来就可以了。
不过我这里要处理一下行数为一的情况。因为我是上下边缘一起加,但是当行数为一时,一起加的时候边缘就会多加一次,所以这里加了一个特判。
还有一点就是,因为如果直接枚举矩阵的左右边缘和上下边缘,矩阵的四个角就会各多加一次。所以我在这里枚举矩阵的左右边缘时,忽略掉矩阵的四个角。
代码
#include<cstdio>
using namespace std;
int n,m,ans,a[101][101];
int main()
{
scanf("%d%d",&n,&m);//读入
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%d",&a[i][j]);//读入
if (n==1) for (int i=1;i<=m;i++) ans+=a[1][i];//处理行数为一的特殊情况
else for (int i=1;i<=m;i++)//枚举矩阵的上下边缘
ans+=a[1][i]+a[n][i];
for (int i=2;i<=n-1;i++)//枚举矩阵的左右边缘(记得要忽略矩阵的四个角)
ans+=a[i][1]+a[i][m];
printf("%d",ans);//输出
return 0;
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------