基础练习 矩阵乘法

试题 基础练习 矩阵乘法(蓝桥杯,详细注释)

资源限制
时间限制: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

分析:

首先我们要知道矩阵的乘法计算
假设有两个矩阵 a,b— m,n
----------------------- c,d — s,k
那么相乘的矩阵为: am+bs ------ an+bk
----------------------------- cm+ds ------ cn+dk
还有就是单位矩阵,当m为0时。我们分三种情况讨论。
1:单位矩阵
2:本身矩阵
3:其他情况

附上代码:

#include<iostream>
using namespace std;
int main()
{
	int a[35][35] = { 0}; int n, m;//n表示多大矩阵,m表示相乘几次
	int c[35][35] = {0}, b[35][35] = { 0 };
	cin >> n >> m;
	int i, j;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= n; j++)
		{
			cin >> a[i][j];
			b[i][j] = a[i][j];//b数组和a数组一样
		}
	if (m == 0)//输出为单位矩阵
	{
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				if (i == j)
					cout << 1 << " ";
				else
					cout << 0 << " ";
			}
			cout << endl;//输出一行后换行
		}
	}
	if (m == 1)//输出为本身矩阵
	{
		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <= n; j++)
			{
				cout << a[i][j];
			}
			cout <<endl;
		}
	}
	if (m >= 2)//开始相乘的矩阵
	{
		int k;//v代表每一个求和的数然后赋给对应的位置
		for (k = 2; k <= m; k++)//执行相乘的次数
		{
			for (i = 1; i <= n; i++)
			{
				for (j = 1; j <= n; j++)
				{int  v = 0;
					for (int z = 1; z <= n; z++)
					{
						v = v + a[i][z] * b[z][j];
					}
					c[i][j] = v;//存放加和结果
				}
			}
			for (i = 1; i <= n; i++)
			{
				for (j = 1; j <= n; j++)
				{
					a[i][j] = c[i][j];//让c[][]赋给a[][],再让a[][]*b[][]
				}
			}
		}

		for (i = 1; i <= n; i++)
		{
			for (j = 1; j <=n; j++)
			{
				cout<<a[i][j]<<" ";
			}
			cout << endl;
		}

	}

	return 0;
}

运行代码:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjg_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值