矩阵乘法
当第 111 个矩阵 AAA 的列数等于第 222 个矩阵 BBB 的行数时,这两个矩阵可以相乘,n×mn×mn×m 的矩阵与 m×km×km×k 的矩阵相乘变成 n×kn×kn×k 的矩阵,其乘积矩阵 A×BA×BA×B 的第i行第j列的元素为矩阵 AAA 第 iii 行上的 mmm 个数与矩阵 BBB 第 jjj 列上的 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 的计算过程为

现输入一个 nnn 行 mmm 列的矩阵 AAA 和一个 mmm 行 kkk 列的矩阵 BBB ,输出 A×BA×BA×B。
输入格式
第一行 333 个整数,分别为 nnn ,mmm ,kkk。
随后输入 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 列的元素为矩阵 AAA 第 iii 行上的 mmm 个数与矩阵 BBB 第 jjj 列上的 mmm 个数对应相乘后所得的 nnn 个乘积之和。
由此,我们可以先设两个二维数组 a[100][100]a[100][100]a[100][100] 和 b[100][100]b[100][100]b[100][100] 用来储存两个相乘的矩阵 AAA 和 BBB。在定义一个数组 c[100][100]c[100][100]c[100][100] 用来储存最后的结果矩阵 CCC。
接下来,开始模拟题目中所说的运算过程。可以定义 333 个变量 iii ,jjj ,lll 分别用来控制矩阵 AAA ,BBB ,CCC 的行和列,其中 iii 控制矩阵 AAA 和 CCC 的行,jjj 控制矩阵 BBB 和 CCC 的列,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
有余力的网友可以在此基础上继续改进,并在下方评论区评论。希望这篇文章能帮到你,感谢阅读!
2257

被折叠的 条评论
为什么被折叠?



