时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
1 2
3 4
样例输出
7 10
15 22
15 22
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 int main(){ 5 int A[35][35],n,m,B[35][35],C[35][35]; 6 cin>>n; 7 cin>>m; 8 for(int i = 0;i < n;i++){ 9 for(int j = 0;j < n;j++) 10 cin>>A[i][j]; 11 } 12 13 memset(C,0,sizeof(C)); 14 if(m){ 15 for(int i = 0;i < n;i++){ 16 for(int j = 0;j < n;j++) 17 B[i][j] = A[i][j]; 18 } 19 for(int i = 0; i < m - 1;i++){ 20 for(int j = 0;j < n;j++){ 21 for(int k = 0;k < n;k++){ 22 for(int x = 0;x < n;x++) 23 C[j][k] += B[j][x] * A[x][k]; 24 } 25 } 26 for(int a = 0;a < n;a++){ 27 for(int b = 0;b < n;b++) 28 B[a][b] = C[a][b]; 29 } 30 memset(C,0,sizeof(C)); 31 } 32 33 } 34 else{ 35 memset(B,0,sizeof(B)); 36 for(int i = 0;i < n;i++){ 37 B[i][i] = 1; 38 } 39 } 40 for(int i = 0;i < n;i++){ 41 for(int j = 0;j < n;j++) 42 cout<<B[i][j]<<' '; 43 cout<<endl; 44 } 45 return 0; 46 }
矩阵0次幂为单位矩阵要考虑进去