我见过许多使用嵌入式循环来求2维矩阵的两条对角线之和的算法,但我自己找到了这个算法:
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那么,这是一种有效的方法吗?你有什么推荐的更好的方法吗?谢谢!
发布于 2021-11-04 07:31:11
一如既往,最有效的解决方案是让编译器为您完成工作。
所有的计算都可以在编译时完成。在运行时根本没什么可做的。
在程序开始运行之前,结果已经可用。
请参考下面的示例:
#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';
}https://stackoverflow.com/questions/69832487
复制相似问题