7-9 矩阵乘法 分数 25 作者 arbalest 单位 河北大学

86 阅读1分钟

 

给出一个大小为N1​×M1​ 的矩阵A和一个大小为N2​×M2​的矩阵B, 令矩阵C=A×B, 输出C.

矩阵乘法的公式为Ci,j​=k=1∑M1​​Ai,k​∗Bk,j​, 矩阵C的第i行第j列是Ci,j​

数据保证M1​=N2​

输入格式:

第一行输入两个正整数N1​、M1​(1≤N1​,M1​≤100)

接下来N1​行,每行M1​个数,表示第一个矩阵

接下来一行两个正整数N2​、M2​(1≤N2​,M2​≤100)

接下来N2​行,每行M2​个数,表示第一个矩阵

输出格式:

输出一个N1​行M2​列的矩阵

输入样例1:

1 2
3 2
2 1
2
2

输出样例1:

10

输入样例2:

3 2
3 3
3 3
3 3
2 4
4 4 4 4
4 4 4 4

输出样例2:

24 24 24 24
24 24 24 24
24 24 24 24

个人思路:

简单的矩阵乘法过程模拟。

注意是哪一行和哪一列对应相乘。

三层循环计即可。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 101;
int A[N][N],B[N][N],C[N][N];
int main()
{
	int n1, n2, m1, m2;
	cin >> n1 >> m1;
	for (int i = 0; i < n1; i++) {
		for (int j = 0; j < m1; j++) {
			cin >> A[i][j];
		}
	}
	cin >> n2 >> m2;
	for (int i = 0; i < n2; i++) {
		for (int j = 0; j < m2; j++) {
			cin >> B[i][j];
		}
	}
	int k = 0;
	for (int i = 0; i < n1; i++) {
		for (int j = 0; j < m2; j++) {
			for (int k = 0; k < m1; k++) {
				C[i][j] += A[i][k] * B[k][i];
			}
		}
	}
	for (int i = 0; i < n1; i++) {
		for (int j = 0; j < m2; j++) {
			cout<<C[i][j]<<" ";
		}
		cout << endl;
	}
}