计算矩阵边缘元素之和

GitHub跳转原题关系图返回列表

读入矩阵时按行列边界判断,累加所有边缘元素且不重复计数。

OJ: noi_openjudge

题目 ID: ch0108-03

难度:入门

标签:矩阵模拟python

日期: 2026-07-30 23:01

题意

计算整数矩阵第一行、最后一行、第一列和最后一列元素之和。

思路

读取每个元素时判断其行或列是否位于边界。使用一个 or 条件,四个角也只会被累加一次。

代码

cpp
#include <cstdio>

int m,n;
int map[200][200];
int main(){
    int i,j,sum=0;
    scanf("%d%d",&m,&n);
    for (i=1;i<=m;i++){
        for (j=1;j<=n;j++){
            scanf("%d",&map[i][j]);
            if( i == 1 || j == 1 || i == m || j==n){
                sum += map[i][j];
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

复杂度

总结

Python代码

python
row_count, column_count = map(int, input().split())
total = 0

for row in range(row_count):
    values = list(map(int, input().split()))
    for column, value in enumerate(values):
        if row in (0, row_count - 1) or column in (0, column_count - 1):
            total += value

print(total)

C++代码

cpp
#include <cstdio>

int m,n;
int map[200][200];
int main(){
    int i,j,sum=0;
    scanf("%d%d",&m,&n);
    for (i=1;i<=m;i++){
        for (j=1;j<=n;j++){
            scanf("%d",&map[i][j]);
            if( i == 1 || j == 1 || i == m || j==n){
                sum += map[i][j];
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

复杂度

时间复杂度为 O(mn)O(mn),除单行输入外额外空间复杂度为 O(n)O(n)

总结

矩阵边界判断可以在读取阶段完成,无需保存整张矩阵。