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
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
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
1 2
3 4
Exemple de sortie
7 10
15 22
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 }