C++程序 高效计算矩阵对角线之和

C++程序 高效计算矩阵对角线之和

给定一个二维方阵,找出主对角线和次对角线元素的总和。例如,考虑以下 4×4 的输入矩阵。

A00 A01 A02 A03
A10 A11 A12 A13
A20 A21 A22 A23
A30 A31 A32 A33

主对角线是由元素 A00、A11、A22、A33 组成。

1. 主对角线的条件:行列条件为行 = 列。   
2. 次对角线由元素 A03、A12、A21、A30 组成。 

2. 次对角线的条件:行列条件为行 = 行数 – 列数 – 1。

例如:

输入:
4
1 2 3 4
4 3 2 1
7 8 9 6
6 5 4 3
输出:
主对角线:16
次对角线:20

输入:
3
1 1 1
1 1 1
1 1 1
输出:
主对角线:3
次对角线:3

方法 1(暴力法):

在此方法中,我们使用两个循环,即列循环和行循环,在内部循环中检查上述条件:

// C++程序:找到对角和
#include <bits/stdc++.h>
using namespace std;
  
const int MAX = 100;
  
void printDiagonalSums(int mat[][MAX],int n)
{
    int principal = 0, secondary = 0;
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)    
        {
            // 主对角线的条件
            if (i == j)
                principal += mat[i][j];
  
            // 次对角线的条件
            if ((i + j) == (n - 1))
                secondary += mat[i][j];
        }
    }
  
    cout << "主对角线:" << principal << endl;
    cout << "副对角线:" << secondary << endl;
}
  
// 主函数
int main()
{
    int a[][MAX] = {{1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {1, 2, 3, 4},
                    {5, 6, 7, 8}};
    printDiagonalSums(a, 4);
    return 0;
}  

输出:

主对角线:18
次对角线:18

时间复杂度 : O(NN),因为我们使用嵌套循环遍历 NN 次。

空间复杂度 : O(1),因为我们不使用任何额外空间。

方法 2(高效方法):

在此方法中,我们使用一个循环,即一个循环用于计算主对角线和次对角线之和:

// C++程序:找到对角和
#include <bits/stdc++.h>
using namespace std;
  
const int MAX = 100;
  
void printDiagonalSums(int mat[][MAX],int n)
{
    int principal = 0, secondary = 0; 
    for (int i = 0; i < n; i++) 
    {
        principal += mat[i][i];
        secondary += mat[i][n - i - 1];        
    }
  
    cout << "主对角线:" << principal << endl;
    cout << "副对角线:" << secondary << endl;
}
  
// 主函数
int main()
{
    int a[][MAX] = {{1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {1, 2, 3, 4},
                    {5, 6, 7, 8}};
    printDiagonalSums(a, 4);
    return 0;
}  

输出:

主对角线:18
次对角线:18

时间复杂度 : O(N),因为我们使用一个循环遍历 N 次。

辅助空间 : O(1),因为我们没有使用任何额外的空间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例