Day1 矩阵乘法

矩阵乘法

当第 111 个矩阵 AAA 的列数等于第 222 个矩阵 BBB 的行数时,这两个矩阵可以相乘,n×mn×mn×m 的矩阵与 m×km×km×k 的矩阵相乘变成 n×kn×kn×k 的矩阵,其乘积矩阵 A×BA×BA×B 的第i行第j列的元素为矩阵 AAAiii 行上的 mmm 个数与矩阵 BBBjjj 列上的 mmm 个数对应相乘后所得的 nnn 个乘积之和。如下图所示,C[1][1]=A[1][0]×B[0][1]+A[1][1]×B[1][1]+A[1][2]×B[2][1]C[1][1]=A[1][0]×B[0][1]+A[1][1]×B[1][1]+A[1][2]×B[2][1]C[1][1]A[1][0]×B[0][1]A[1][1]×B[1][1]A[1][2]×B[2][1]
矩阵乘法
例如,已知
已知
则矩阵 A×BA×BA×B 的计算过程为
计算过程
现输入一个 nnnmmm 列的矩阵 AAA 和一个 mmmkkk 列的矩阵 BBB ,输出 A×BA×BA×B

输入格式

第一行 333 个整数,分别为 nnnmmmkkk

随后输入 AAA 矩阵和 BBB 矩阵,矩阵中每个元素值的绝对值不超过 100010001000

输出格式

输出 A×BA×BA×B 的矩阵,两数之间以空格间隔。

输入样例

3 2 3
1 4
2 5
3 6
1 2 3
4 5 6

输出样例

17 22 27
22 29 36
27 36 45

解题思路

读题可知,矩阵 A×BA×BA×B 的第 iii 行第 jjj 列的元素为矩阵 AAAiii 行上的 mmm 个数与矩阵 BBBjjj 列上的 mmm 个数对应相乘后所得的 nnn 个乘积之和。

由此,我们可以先设两个二维数组 a[100][100]a[100][100]a[100][100]b[100][100]b[100][100]b[100][100] 用来储存两个相乘的矩阵 AAABBB。在定义一个数组 c[100][100]c[100][100]c[100][100] 用来储存最后的结果矩阵 CCC

接下来,开始模拟题目中所说的运算过程。可以定义 333 个变量 iiijjjlll 分别用来控制矩阵 AAABBBCCC 的行和列,其中 iii 控制矩阵 AAACCC 的行,jjj 控制矩阵 BBBCCC 的列,lll 控制矩阵 AAA 的列以及矩阵 BBB 的行,最后将乘积赋值给矩阵 CCC 的每个元素即可,即 c[i][j]+=a[i][l]∗b[l][j]c[i][j]+=a[i][l]*b[l][j]c[i][j]+=a[i][l]b[l][j]

Code

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,m,k;
	int a[100][100],b[100][100],c[100][100];
	cin>>n>>m>>k;
	for(int i=0; i<n; i++)
		for(int j=0; j<m; j++)
			cin>>a[i][j];
	for(int i=0; i<m; i++)
		for(int j=0; j<k; j++)
			cin>>b[i][j];
	for(int i=0; i<n; i++)
		for(int j=0; j<k; j++)
			for(int l=0; l<m; l++)
				c[i][j]+=a[i][l]*b[l][j];
	for(int i=0; i<n; i++)
		for(int j=0; j<k; j++)
			printf("%d%c",c[i][j],(j==k-1?'\n':' '));
	return 0;
}//保证AC

有余力的网友可以在此基础上继续改进,并在下方评论区评论。希望这篇文章能帮到你,感谢阅读!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值