码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-24 20:23:13      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:include   void   return   cout   typedef   string   vip   else   超过   

时间限制: 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; }

 

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

标签:include   void   return   cout   typedef   string   vip   else   超过   

原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8932842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!