蓝桥杯练习系统 基础练习 矩阵乘法(C++)

 new动态数组出错,需考虑0次幂情况,矩阵两两相乘简单,被m次幂循环搞得抓狂!!!


问题描述

  给定一个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
using namespace std;
int n, m;
int A[30][30];//定义静态二维数组 
int B[30][30];
int C[30][30];
void matrix_mult()//矩阵乘法 
{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				for (int k = 0; k < n; k++)
				{
					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n;j++)
				{
					A[i][j] = C[i][j];
					C[i][j]=0;
				}
		}
}
int main()
	{
		cin >> n >> m;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				cin >> A[i][j];
				B[i][j]=A[i][j];
			}
		}
		if (m == 0)//矩阵0次幂输出单位矩阵 
		{
			for (int i = 0; i < n; i++)
			{
				for (int j = 0; j < n; j++)
				{
					if (i == j)
					{
						A[i][j] = 1;
					}
					else
					{
						A[i][j]=0;
					}
				}
			}
		}
		while(m>1)//矩阵的m次幂 
		{
			matrix_mult();
			m--;
		}
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				cout << A[i][j] << " ";
				if (j == n - 1)cout << endl;
			}
		}

		return 0;
	}

 

你可能感兴趣的:(蓝桥杯练习系统 基础练习 矩阵乘法(C++))