设计一个算法,实现m行n列的二维整型数组a的左上角-右下角和右下角-左上角两条主对角线元素之和,当m<>n时返回false,否则返回true。C++算法
时间: 2024-11-05 13:31:44 浏览: 19
1_二维数组赋值和指针操作_对角矩阵_club4xh_
5星 · 资源好评率100%
要实现这个算法,你可以创建一个名为`sumDiagonals`的函数,接受一个二维整数数组`a`以及其行数`m`和列数`n`作为参数。首先检查`m`是否等于`n`,如果不等,则直接返回`false`。然后计算两个指定的主对角线元素之和。
以下是C++代码实现:
```cpp
#include <iostream>
bool sumDiagonals(int a[][n], int m, int n) {
// 检查行数是否等于列数
if (m != n) {
return false;
}
int leftToRightSum = 0;
int rightToLeftSum = 0;
// 计算左上到右下角的和(从左上角开始)
for (int i = 0; i < m; ++i) {
leftToRightSum += a[i][i];
}
// 计算右下到左上的和(从右下角倒序开始)
for (int i = m - 1; i >= 0; --i) {
rightToLeftSum += a[i][m - 1 - i]; // 注意索引调整
}
// 如果两条对角线的和相等则返回true,否则返回false
return leftToRightSum == rightToLeftSum;
}
// 示例用法
int main() {
int m = 3, n = 3;
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
bool result = sumDiagonals(arr, m, n);
std::cout << "Are the sums of the diagonals equal? " << (result ? "Yes" : "No") << std::endl;
return 0;
}
```
阅读全文