Examen des questions exercices de base multiplication de la matrice

1. Titre

Lien de titre
  http://lx.lanqiao.cn/problem.page?gpid=T58
Description du problème
  Étant donné une matrice d'ordre N, la sortie A à la puissance de M (M est un entier non négatif)
  Par exemple:
  A =
  1 2
  3 4
  A à la puissance de 2
  7 10
  15 22
Format d'entrée
  La première ligne est un entier positif N, M (1 <= N <= 30, 0 <= M <= 5), indiquant l'ordre de la matrice A et la puissance requise. Les
  N lignes suivantes, N valeurs absolues par ligne Entier non négatif ne dépassant pas 10, décrivant la valeur de la matrice A
Format de sortie
  Un total de N lignes est sorti, avec N entiers dans chaque ligne, représentant la matrice correspondant à la M-ème puissance de A. Les nombres adjacents sont séparés par un espace
Exemple d'entrée
2 2
1 2
3 4
Exemple de sortie
7 10
15 22

2. Résoudre

Idée: utilisez trois matrices, c matrice est la matrice de résultat, une matrice est la matrice d'origine et b matrice est la matrice c qui stocke temporairement les données de calcul actuelles. Pour c [i] [j] + = c [i] [h] * c [h] [j] (h de 1 à n)

1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 en  utilisant l'espace de noms std;
 7  int a [35] [35], b [35] [ 35], c [35] [35]; // La matrice b est initialement une matrice d'identité 
8  int N, M;
 9  
10  void Myprint ( int b [] [35]) { // La valeur du tableau de sortie 
11      for ( int i = 1; i <= N; i ++ ) {
 12          pour ( int j = 1; j <= N; j ++ ) {
 13              si(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      for ( int i = 1; i <= N ; i ++ ) {
 20          pour ( int j = 1; j <= N; j ++ ) {
 21              c [i] [j] = b [i] [j];
22          }
 23      }
 24  }
 25  int main () {
 26     cin >> N >> M;
 27      
28      pour ( int i = 1; i <= N; i ++ ) {
 29          pour ( int j = 1; j <= N; j ++ ) {
 30              cin >> a [i] [ j];
 31              c [i] [j] = a [i] [j]; // un tableau et un tableau c sont la matrice A 
32              si (i == j) b [i] [j] = 1; // b le tableau est la matrice d'identité 
33              sinon b [i] [j] = 0 ;
 34          }
 35      }
 36      si (M == 0) Myprint (b); // affiche la matrice d'identité 
37      sinon  si (M == 1 ) Myprint ( a);
38      else {
 39      for ( int t = 2; t <= M; t ++) { // Mth power 
 40          // Remarque: Pour chaque résultat de calcul d'une matrice et d'une matrice c, le tableau b est stocké en premier, car si c est utilisé Stockage de tableaux, le calcul sera mélangé, ce qui rend le résultat incorrect 
41          pour ( int i = 1; i <= N; i ++ ) {
 42              pour ( int j = 1; j <= N; j ++ ) {
 43                  pour ( int 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); // Attribue la valeur du tableau b au tableau 
50 50      }
 51      Myprint (c);
 52      } 
 53      renvoie 0 ; 
 54 }

 

 
 

Je suppose que tu aimes

Origine www.cnblogs.com/Aiahtwo/p/12729352.html
conseillé
Classement