蓝桥 BASIC-17 矩阵乘法

*矩阵乘法

问题描述
  给定一个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次幂所对应的矩阵。相邻的数之间用一个空格隔开

在这里插入图片描述
(注:图片来自:https://www.cnblogs.com/didcq/p/6489903.html)

#include<iostream>
using namespace std;
int main()
{
	int a[35][35]={};
	int b[35][35]={};
	int c[35][35]={};
	int p,q;//阶数,幂数 
	int x,y;//用于表示阶数 x<=p ,用于表示幂数 y<=q 
	int i,j,k;
	cin >> p >> q;
	x = p;
	y = q;
	for(i=0;i<p;i++)//输入 
	{
		for(j=0;j<p;j++)
		{
			cin >> a[i][j];
			b[i][j] = a[i][j];
		}
	}
	if(q == 0)
	{
		for(i=0;i<p;i++)
		{
			for(j=0;j<p;j++)
			{
				if(i==j)
					cout << "1" << " ";
				else
					cout << "0" << " ";
			}
			cout <<	endl;
		}
	}
	if(q == 1)
	{
		for(i=0;i<p;i++)
		{
			for(j=0;j<p;j++)
			{
				cout << a[i][j] << " ";
			}
			cout << endl;
		}
	}
	while(y >= 2)
	{
		while(x)
		{
			for(i=0;i<p;i++)
			{
				for(j=0;j<p;j++)
				{
					c[i][j] += a[i][x-1] * b[x-1][j];
				}
			}
			x--;//每进行一次乘法,阶数减一
		}
		x = p;
		for(i=0;i<p;i++)
		{
			for(j=0;j<p;j++)
			{
				a[i][j] = c[i][j];
				c[i][j] = 0;
			}
		} 
		y--;//矩阵每进行一次乘法,幂数减一(幂数为n,则进行n-1次乘法)
	}
	if(q >= 2)
	{
		for(i=0;i<p;i++)
		{
			for(j=0;j<p;j++)
			{
				cout << a[i][j];
				cout << " ";
			}
			cout << endl;
		}
	}
	return 0;
}
发布了17 篇原创文章 · 获赞 0 · 访问量 1418

猜你喜欢

转载自blog.csdn.net/weixin_43511030/article/details/104144771