I Got a Matrix!
发布日期:2021-05-07 07:04:48 浏览次数:27 分类:精选文章

本文共 1785 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要计算一个 n 行 m 列矩阵边缘元素的和。边缘元素包括第一行、最后一行、第一列和最后一列的元素。为了避免重复计算四个角的元素,我们需要特别处理这些情况。

方法思路

  • 读取输入:首先读取矩阵的行数 n 和列数 m,然后读取矩阵中的元素。
  • 初始化结果变量:初始化一个变量来存储边缘元素的和。
  • 处理特殊情况:当矩阵只有一个行或一个列时,直接将所有元素相加。
  • 遍历边缘元素
    • 如果矩阵有多行多列,遍历第一行和最后一行的所有元素。
    • 遍历中间行的第一列和最后一列的元素,避免重复计算四个角的元素。
  • 输出结果:将计算结果输出。
  • 解决代码

    I Got a Matrix!

    题目

    给定一个 n ∗ m 的矩阵 A,询问位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

    输入

    第一行包含两个整数 n 和 m。

    之后 n 行每行包含 m 个整数 Ai,j。

    输出

    共一行包含一个整数 ans,表示位于矩阵边缘的元素之和。

    输入样例

    3 33 4 13 7 12 0 1

    输出样例

    15

    数据范围

    对于 100% 的数据:n, m ≤ 100

    思路

    这道题就是一道模拟题,我们枚举矩阵的边,在一个一个加起来就可以了。

    不过我这里要处理一下行数为一的情况。因为我是上下边缘一起加,但是当行数为一时,一起加的时候边缘就会多加一次,所以这里加了一个特判。
    还有一点就是,因为如果直接枚举矩阵的左右边缘和上下边缘,矩阵的四个角就会各多加一次。所以我在这里枚举矩阵的左右边缘时,忽略掉矩阵的四个角。

    代码

    #include 
    using namespace std;int main() { int n, m; scanf("%d %d", &n, &m); int a[101][101]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { scanf("%d", &a[i][j]); } } int ans = 0; if (n == 1) { for (int j = 1; j <= m; j++) { ans += a[1][j]; } } else { for (int j = 1; j <= m; j++) { ans += a[1][j]; } for (int j = 1; j <= m; j++) { ans += a[n][j]; } for (int i = 2; i <= n - 1; i++) { ans += a[i][1] + a[i][m]; } } printf("%d", ans); return 0;}

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    代码解释

  • 读取输入:使用 scanf 读取矩阵的行数 n 和列数 m,然后读取矩阵中的元素。
  • 初始化结果变量ans 初始化为 0,用于存储边缘元素的和。
  • 处理特殊情况:当矩阵只有一个行时,直接遍历该行所有元素并求和。
  • 遍历边缘元素
    • 遍历第一行和最后一行的所有元素。
    • 遍历中间行的第一列和最后一列的元素,避免重复计算四个角的元素。
  • 输出结果:将计算结果输出。
  • 这种方法确保了我们正确地计算了矩阵边缘元素的和,避免了重复计算四个角的元素,适用于不同大小的矩阵。

    上一篇:I Liked Matrix!
    下一篇:学校初一模拟赛(2019.5.11)

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月05日 01时07分14秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章