[蓝桥杯]矩阵乘法

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

时间限制: 1Sec 内存限制: 128MB 提交: 445 解决: 132

题目描述
给定一个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

解题思路

这道题,主要考查线代的解法,比较坑的是当M=1的时候,结果是[0][0]到[N-1][N-1]对角线上为1,其余为0
还要注意一下格式的输出,不能有多余的空格和换行

完整代码

#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;

int main()
{
	int n,M;
	cin>>n;
	cin>>M;
	int n1[35][35];
	int n2[35][35];
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
		{
			cin>>n1[i][j];
			n2[i][j]=n1[i][j];
		}

	int nn[35][35];
	
	if(M==0)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				if(i==j)
					nn[i][j]=1;
				else
					nn[i][j]=0;
	if(M==1)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				nn[i][j]=n1[i][j];
	else
		for(int m=2;m<=M;m++)
		{
			for(int i=0;i<n;i++)
				for(int j=0;j<n;j++)
				{
					int score=0;
					for(int k=0;k<n;k++)
					{
						score+=n1[i][k]*n2[k][j];
					}
					nn[i][j]=score;
				}
			for(int i=0;i<n;i++)
				for(int j=0;j<n;j++)
				{
					n2[i][j]=nn[i][j];
				}
		}
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout<<nn[i][j];
			if(j!=n-1)
				cout<<" ";
		}
		if(i!=n-1)
			cout<<endl;
	}
			
}

欢迎大家留言交流代码

猜你喜欢

转载自blog.csdn.net/DanBo_C/article/details/87895240