基础篇-BASIC-17 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<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");
	}
}

你可能感兴趣的:(题解(C/C++/java))