试题 基础练习 矩阵乘法
资源限制
时间限制: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<stdio.h>
int main(){
int n,m;
int i,j;
scanf("%d %d",&n,&m);
int a[30][30],b[30][30];
for(i=0;i<n;i++){ //输入矩阵
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
b[i][j]=a[i][j];
}
}
int k=0,x=0,y=0;
int count=0;
int t;
while(count<m){ //N为矩阵A的阶数,M为幂数
for(i=0;i<n;i++){
int sum=0;
for(j=0;j<n;j++){
t=a[k][j]*b[j][i];
sum+=t;
}
b[x][y++]=sum;
if(y>=n){
y=0;
x++;
}
if(i==n-1&k!=n-1){
i=-1;
k++;
}
else if(i==n-1 && k==n-1) break;
}
count++;
}
for(i=0;i<n;i++){ //输出矩阵
for(j=0;j<n;j++){
printf("%d ",b[i][j]);
}
printf("\n");
}
}