首頁 >後端開發 >C++ >C++程式計算矩陣對角線之和

C++程式計算矩陣對角線之和

PHPz
PHPz轉載
2023-09-07 20:01:021251瀏覽

C++程式計算矩陣對角線之和

The utilization of 2-dimensional arrays or matrices is extremely advantageous for several applications. Matrix rows and columns are used to hold numbers. We can define 2D 在C 中使用多維數組來表示矩陣。在本文中,我們將看看如何實現 use C to calculate the diagonal sum of a given square matrix.

The matrices have two diagonals, the main diagonal and the secondary diagonal (sometimes referred to as major and minor diagonals). The major diagonal starts from the top-left corner (index [0, 0]) to the bottom-right corner (index [n-1, n-1]) where n is the order of the 正方形矩陣。主對角線從右上角(索引[n-1, 0])開始,到左下角 corner (index [0, n-1]). Let us see the algorithm to find the sum of the elements along with se two diagonals.

Matrix Diagonal Sum

的中文翻譯為:

矩陣對角線總和

$$\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

In the previous example, one 3 x 3 matrix was used. We have scanned the diagonals individually and calculated the sum. Let us see the algorithm and implementation for a clear view.

Algorithm

  • 讀取矩陣 M 為輸入
  • 考慮 M 有 n 行和 n 列
  • sum_major := 0
  • sum_minor := 0
  • 對於i從0到n-1的範圍,執行
    • for j rangign from 0 to n - 1, do
      • if i and j are the same, then
        • sum_major := sum_major M[ i ][ j ]
      • end if
      • if (i j) is same as (N - 1), then
        • sum_minor := sum_minor M[ i ][ j ]
      • end if
    • end for
  • end for
  • return sum

Example

#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

Conclusion

In this article, we have seen how to calculate the diagonal sums of a given square matrix. 主對角線從左上角延伸到右下角,而副對角線則從左下角延伸到右上角 斜線從右上角開始到左下角。要找到這些的總和 diagonal elements, we loop through all elements. When both row and column index values 相同,它表示主對角線元素,當兩個索引的和為 與矩陣的階數n-1相同,它將加到副對角線上 procedure takes two nested loops and we are traversing through all elements present in the 2D數組。因此,計算兩條對角線的和將花費O(n2)的時間 給定的矩陣。

以上是C++程式計算矩陣對角線之和的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除