千千蓝鲸2983 N字上的数字和

c++有一个 n×n 的方阵,第 1 列、对角线和第 n 列可以构成一个 “N”字,请编程求出这个 “N” 字上所有元素的和。 N字.png 输入描述 第1行是一个正整数 n。 接下来 n 行,每行 n 个正整数,用空格隔开。数字不大于 1000。 输出描述 一个正整数。

样例输入 1

4 9 7 3 4 2 3 2 6 3 2 1 0 1 1 1 1

样例输出 1

30

要解决这个问题,我们需要遍历矩阵,只累加那些构成“N”字的元素。具体来说,“N”字包括以下几部分:

  1. 第一列的所有元素。
  2. 对角线上的所有元素(从左上到右下)。
  3. 最后一列的所有元素,除了对角线上的那个元素(因为它已经在第二部分被累加过了)。

我们可以通过以下步骤来实现这个算法:

  1. 读取输入的矩阵大小 n 和矩阵本身。
  2. 初始化一个变量 sum 来存储“N”字上所有元素的和。
  3. 遍历矩阵,累加第一列、对角线和最后一列(除了对角线上的元素)的元素。
  4. 输出最终的 sum

下面是实现这个算法的C++代码:

 
#include <iostream>
#include <vector>

int main() {
    int n;
    std::cin >> n;
    
    std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
    
    // 读取矩阵
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            std::cin >> matrix[i][j];
        }
    }
    
    int sum = 0;
    
    // 累加第一列、对角线和最后一列(除了对角线上的元素)
    for (int i = 0; i < n; ++i) {
        sum += matrix[i][0];          // 第一列
        sum += matrix[i][i];          // 对角线
        if (i != n - 1 - i) {         // 最后一列,除了对角线上的元素
            sum += matrix[i][n - 1];
        }
    }
    
    std::cout << sum << std::endl;
    
    return 0;
}

解释

  1. 读取输入:首先读取矩阵的大小 n,然后读取矩阵的每一行。
  2. 初始化 sum:用于存储“N”字上所有元素的和。
  3. 遍历矩阵
    • 累加第一列的元素:matrix[i][0]
    • 累加对角线的元素:matrix[i][i]
    • 累加最后一列的元素,但要排除对角线上的元素(即 i == n - 1 - i 的情况):matrix[i][n - 1]
  4. 输出结果:最终输出 sum

这个算法的时间复杂度是 O(n),因为我们需要遍历矩阵的每一行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值