1. Título
Enlace del título
http://lx.lanqiao.cn/problem.page?gpid=T58
Descripción del problema
Dada una matriz de orden N A, la salida A a la potencia de M (M es un entero no negativo)
Por ejemplo:
A =
1 2
3 4
A a la potencia de 2
7 10
15 22
Por ejemplo:
A =
1 2
3 4
A a la potencia de 2
7 10
15 22
Formato de entrada
La primera fila es un entero positivo N, M (1 <= N <= 30, 0 <= M <= 5), que indica el orden de la matriz A y la potencia requerida. Las
siguientes N filas, N valores absolutos por fila Entero no negativo no superior a 10, que describe el valor de la matriz A
siguientes N filas, N valores absolutos por fila Entero no negativo no superior a 10, que describe el valor de la matriz A
Formato de salida
Se emite un total de N filas, con N enteros en cada fila, que representan la matriz correspondiente a la potencia M-ésima de A. Los números adyacentes están separados por un espacio.
Entrada de muestra
2 2
1 2
3 4
1 2
3 4
Salida de muestra
7 10
15 22
15 22
2. Resolver
Idea: utilice tres matrices, la matriz c es la matriz resultante, una matriz es la matriz original y la matriz b es la matriz c que almacena temporalmente los datos de cálculo actuales. Para c [i] [j] + = c [i] [h] * c [h] [j] (h de 1 a n)
1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 usando el espacio de nombres std; 7 int a [35] [35], b [35] [ 35], c [35] [35]; // La matriz b es inicialmente una matriz de identidad 8 int N, M; 9 10 void Myprint ( int b [] [35]) { // El valor de matriz de salida 11 para ( int i = 1; i <= N; i ++ ) { 12 para ( int j = 1; j <= N; j ++ ) { 13 si(j! = N) cout << b [i] [j] << "" ; 14 más cout << b [i] [j] << endl; 15 } 16 } 17 } 18 nulo Diversión ( int b [] [35], int c [] [35]) { // 将 b 数组 的 值 赋给 c 数组 19 para ( int i = 1; i <= N ; i ++ ) { 20 para ( 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 para ( int i = 1; i <= N; i ++ ) { 29 para ( int j = 1; j <= N; j ++ ) { 30 cin >> a [i] [ j]; 31 c [i] [j] = a [i] [j]; // una matriz y una matriz c son matriz A 32 si (i == j) b [i] [j] = 1; // b array es la matriz de identidad 33 más b [i] [j] = 0 ; 34 } 35 } 36 if (M == 0) Myprint (b); // salida de la matriz de identidad 37 else if (M == 1 ) Myprint ( a); 38 else { 39 for ( int t = 2; t <= M; t ++) { // Mth power 40 // Nota: Para cada resultado de cálculo de una matriz y una matriz c, la matriz b se almacena primero, porque si se usa c Almacenamiento de matriz, el cálculo se combinará, haciendo que el resultado sea incorrecto 41 para ( int i = 1; i <= N; i ++ ) { 42 para ( int j = 1; j <= N; j ++ ) { 43 para ( int h = 1; h <= N; h ++ ) { 44 if (h == 1) b [i] [j] = c [i] [h] * a [h] [j]; 45 más b [i] [ j] + = c [i] [h] * a [h] [j]; 46 } 47 } 48 } 49 Fun (b, c); // Asigna el valor de la matriz b a la matriz 50 50 } 51 Myprint (c); 52 } 53 devuelve 0 ; 54 }