C++程序计算矩阵对角线之和
二维数组或矩阵在许多应用中都非常有用。矩阵的行和列用于存储数字。我们也可以使用多维数组在C++中定义二维矩阵。在本文中,我们将学习如何使用C++计算给定方阵的对角线之和。
矩阵有两个对角线,主对角线和次对角线(有时也称为主对角线和副对角线)。主对角线从左上角(索引[0, 0])到右下角(索引[n-1, n-1]),其中n是方阵的阶数。次对角线从右上角(索引[n-1, 0])到左下角(索引[0, n-1])。让我们看看计算这两个对角线元素之和的算法。
矩阵对角线之和
$$\begin{bmatrix} 8 & 5& 3\newline 6 & 7& 1\newline 2 & 4& 9\ \end{bmatrix},$$
Sum of all elements in major diagonal: (8 + 7 + 9) = 24 Sum of all elements in minor diagonal: (3 + 7 + 2) = 12
在前面的例子中,使用了一个3 x 3的矩阵。我们分别扫描了对角线并计算了它们的和。让我们看看算法和实现以更清楚地了解。
算法
- 读取矩阵M作为输入
- 假设M有n行n列
- sum_major := 0
- sum_minor := 0
- 对于i从0到n-1,执行
- 对于j从0到n-1,执行
- 如果i和j相同,则
- sum_major := sum_major + M[i][j]
- 结束if
- 如果(i + j)等于(N - 1),则
- sum_minor := sum_minor + M[i][j]
- 结束if
- 如果i和j相同,则
- 结束for
- 对于j从0到n-1,执行
- 结束for
- 返回sum
示例
#include <iostream> #include <cmath> #define N 7 using namespace std; float solve( int M[ N ][ N ] ){ int sum_major = 0; int sum_minor = 0; for ( int i = 0; i < N; i++ ) { for ( int j = 0; j < N; j++ ) { if( i == j ) { sum_major = sum_major + M[ i ][ j ]; } if( (i + j) == N - 1) { sum_minor = sum_minor + M[ i ][ j ]; } } } cout << "The sum of major diagonal: " << sum_major << endl; cout << "The sum of minor diagonal: " << sum_minor << endl; } int main(){ int mat1[ N ][ N ] = { {5, 8, 74, 21, 69, 78, 25}, {48, 2, 98, 6, 63, 52, 3}, {85, 12, 10, 6, 9, 47, 21}, {6, 12, 18, 32, 5, 10, 32}, {8, 45, 74, 69, 1, 14, 56}, {7, 69, 17, 25, 89, 23, 47}, {98, 23, 15, 20, 63, 21, 56}, }; cout << "For the first matrix: " << endl; solve( mat1 ); int mat2[ N ][ N ] = { {6, 8, 35, 21, 87, 8, 26}, {99, 2, 36, 326, 25, 24, 56}, {15, 215, 3, 157, 8, 41, 23}, {96, 115, 17, 5, 3, 10, 18}, {56, 4, 78, 5, 10, 22, 58}, {85, 41, 29, 65, 47, 36, 78}, {12, 23, 87, 45, 69, 96, 12} }; cout << "\nFor the second matrix: " << endl; solve( mat2 ); }
输出
For the first matrix: The sum of major diagonal: 129 The sum of minor diagonal: 359 For the second matrix: The sum of major diagonal: 74 The sum of minor diagonal: 194
结论
在本文中,我们学习了如何计算给定方阵的对角线之和。主对角线从左上角到右下角,次对角线从右上角到左下角。为了找到这些对角线元素的和,我们循环遍历所有元素。当行索引和列索引值相同时,表示主对角线元素;当两个索引的和等于n-1(其中n是矩阵的阶数)时,它将添加到次对角线。此过程需要两个嵌套循环,我们遍历二维数组中的所有元素。因此,计算给定矩阵的两个对角线之和需要O(n2)的时间。
广告