[蓝桥杯][基础练习VIP]矩阵乘法

时间限制: 1Sec 内存限制: 128MB 提交: 113 解决: 30

题目描述
给定一个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个绝对值不超过10的非负整数,描述矩阵A的值 
输出
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开 
样例输入
2  2 

1  2 

3  4 
样例输出
7 10
15 22
//eg.注意如何处理m=0时候的情况,需要进行特判
#include<cstring> #include<cstdio> #include<iostream> using namespace std; const int maxn = 31; typedef long long LL; LL A[maxn][maxn],B[maxn][maxn],C[maxn][maxn],E[maxn][maxn]; int main(void) { for(int i=1;i<=30;i++) E[i][i]=1; int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { cin>>A[i][j]; B[i][j]=C[i][j]=A[i][j]; } if(m==0) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<E[i][j]<<" "; } cout<<endl; } } else { for(int k=0;k<m-1;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { LL sum=0; for(int t=1;t<=n;t++) { sum+=A[i][t]*B[t][j]; } C[i][j]=sum; } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) B[i][j]=C[i][j]; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<C[i][j]<<" "; } cout<<endl; } } return 0; }
原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8932842.html