蓝桥杯:VIP试题 基础练习 矩阵乘法
程序员文章站
2022-07-12 09:14:12
...
蓝桥杯:VIP试题 基础练习 矩阵乘法
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个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
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[31][31]={0};//输入进来的数组
int t[31][31]={0};//用来计算几次幂的数组
int other[31][31]={0};//用来中转数据的数组
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
cin>>a[i][j];
}
}
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
t[i][j]=a[i][j];
}
}
// 当零次幂时,为单位矩阵
if(m == 0){
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
if(i == j) cout<<1<<" ";
else cout<<0<<" ";
}
cout<<endl;
}
}
// 当一次幂时,为本身
else if(m == 1){
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
printf("%d ",a[i][j]);
//cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
/*
1 2
3 4
*/
// 当多次幂时,便为矩阵乘法
else{
/*每次幂的计算都是乘以原数组a*/
while(m-1){//m=2实际就只进行1次乘法, m=3实际进行2次乘法,所以是m-1
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
int temp = 0;
/*计算i行j列的元素值*/
for(int k = 1;k <= n;k++){
temp = temp + t[i][k]*a[k][j];
}
other[i][j] = temp; //将计算好的 i行j列的元素值先存放至中转站处
}
}
/*将中转数组的数据移放至t数组中,以供下次输出结果或进行下次计算*/
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
t[i][j]=other[i][j];
}
}
m--;
}
/*输出m次幂后的答案*/
for(int i = 1; i <= n;i++){
for(int j = 1; j <= n;j++){
printf("%d ",t[i][j]);
//cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
return 0;
}
上一篇: 蓝桥杯VIP试题 之 基础练习 矩阵乘法 - JAVA
下一篇: 常见查找算法实现(c++)