試験問題の基本的な演習行列の乗算

1.タイトル

タイトルリンク
  http://lx.lanqiao.cn/problem.page?gpid=T58
問題の説明
  N次の行列Aが与えられた場合、出力AのM乗(Mは負でない整数)
  例:
  A =
  1 2
  3 4
  Aの2
  7 10   15 22
入力フォーマット
  最初の行は正の整数N、M(1 <= N <= 30、0 <= M <= 5)で、行列Aの順序と必要な検出力を示します。
  次のN行、行ごとのN絶対値行列Aの値を表す10以下の非負の整数
出力フォーマット
  合計N行が出力されます。各行にN個の整数があり、AのM乗に対応する行列を表します。隣接する数字はスペースで区切られます
入力例
2 2
1 2
3 4
出力例
7 10
15 22

2.解決する

アイデア:3つの行列を使用します。c行列は結果行列、行列は元の行列、b行列は現在の計算データを一時的に格納するc行列です。c [i] [j] + = c [i] [h] * c [h] [j]の場合(hは1からn)

1 #include <アルゴリズム>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6  名前空間stdを使用;
 7  int a [35] [35]、b [35] [ 35]、C [35] [35]; // B初期行列が単位行列である
8。 整数N、M;
 9  
10  空隙 myprint(int型 B [] [35]){ // アレイ出力値
11      のためのINTは私= 1; i <= N; i ++ ){
 12          forint j = 1; j <= N; j ++ ){
 13              if(j!= N)cout << b [i] [j] << "" ;
14              else cout << b [i] [j] << endl;
15          }
 16      } 
 17  }
 18  void Fun(int b [] [35]、int c [] [35]){ // b数组的值赋给c数组
19      forint i = 1; i <= N ; i ++ ){
 20          forint j = 1; j <= N; j ++ ){
 21              c [i] [j] = b [i] [j];
22          }
 23      }
 24  }
 25  int main(){
 26     cin >> N >> M;
 27      
28      forint i = 1; i <= N; i ++ ){
 29          forint j = 1; j <= N; j ++ ){
 30              cin >> a [i] [ j];
 31              c [i] [j] = a [i] [j]; // 配列とc配列は行列A 
32              if(i == j)b [i] [j] = 1; // b配列は単位行列
33              else b [i] [j] = 0 ;
 34          }
 35      }
 36      if(M == 0)Myprint(b); // 出力単位行列
37      else  if(M == 1 )Myprint( a);
38      else {
 39      forint t = 2; t <= M; t ++){ // M乗 
 40          // 注:行列とc行列の計算結果ごとに、b配列が最初に格納されます。配列ストレージ、計算が混合され、結果が間違っている
41          forint i = 1; i <= N; i ++ ){
 42              forint j = 1; j <= N; j ++ ){
 43                  forint h = 1; h <= N; h ++ ){
 44                      if(h == 1)b [i] [j] = c [i] [h] * a [h] [j];
 45                      else b [i] [ j] + = c [i] [h] * a [h] [j];
 46                  }
 47              }
 48         }
 49          Fun(b、c); // 配列bの値を配列cに割り当てます
50      }
 51      Myprint(c);
 52      } 
 53      return 0 ; 
 54 }

 

 
 

おすすめ

転載: www.cnblogs.com/Aiahtwo/p/12729352.html