欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥 BASIC-17 矩阵乘法

程序员文章站 2022-06-12 12:47:04
...

矩阵乘法

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

蓝桥 BASIC-17 矩阵乘法
(注:图片来自: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;
}
相关标签: 蓝桥