首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有效地对二维矩阵的两条对角线求和。

有效地对二维矩阵的两条对角线求和。
EN

Stack Overflow用户
提问于 2021-11-03 22:32:00
回答 1查看 44关注 0票数 1

我见过许多使用嵌入式循环来求2维矩阵的两条对角线之和的算法,但我自己找到了这个算法:

代码语言:javascript
运行
复制
int arr[3][3]{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// diags sum = 1 + 5 + 9 + 3 + 5 + 7 = 30
int sum = 0;
for(int i = 0; i != 3; ++i)
    sum += arr[i][i] + arr[3 -1 - i][i];
std::cout << sum << '\n'; // 30

那么,这是一种有效的方法吗?你有什么推荐的更好的方法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-11-04 07:31:11

一如既往,最有效的解决方案是让编译器为您完成工作。

所有的计算都可以在编译时完成。在运行时根本没什么可做的。

在程序开始运行之前,结果已经可用。

请参考下面的示例:

代码语言:javascript
运行
复制
#include <iostream>
#include <array>

// Some typing saver
constexpr size_t SquareMatrixDimension = 3u;
using Matrix = std::array<std::array<int, SquareMatrixDimension>, SquareMatrixDimension>;

// constexpr function to get sum of diagonals
constexpr int getsumDiagonals(const Matrix& data) {
    int sum{};
    for (size_t i{}; i < SquareMatrixDimension; ++i)
        sum += data[i][i] + data[SquareMatrixDimension - 1 - i][i];
    return sum;
}

// OurTest Data
constexpr Matrix data{ {
    {1,2,3},
    {4,5,6},
    {7,8,9}
} };
// Compile time calculation of sum of diagonals
constexpr int sumDiagonals = getsumDiagonals(data);


int main() {
    // Just show the result . ..
    std::cout << sumDiagonals << '\n';
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69832487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档