LuoguB2105 矩阵乘法 题解

Content

给定一个 \(n\times m\) 的矩阵 \(A\) 和一个 \(m\times k\) 的矩阵 \(B\),求两个矩阵相乘得到的矩阵。

\(n\times m\) 的矩阵 \(A\) 和一个 \(m\times k\) 的矩阵 \(B\) 相乘会得到一个 \(n\times k\) 的矩阵 \(C\),并且有以下关系:

\[C_{i,j}=\sum\limits_{p=1}^mA_{i,p}+B_{p,j} \]

数据范围:\(1\leqslant n,m\leqslant 100\)

Solution

根据题意,我们先循环 \(i\),再循环 \(j\),最后在循环 \(p\),按照公式直接求 \(A_{i,p}\)\(B_{p,j}\) 的和,加入 \(C_{i,j}\) 中即可得到 \(C\) 矩阵。

多提一嘴:当且仅当 \(A\) 矩阵的列数等于 \(B\) 矩阵的行数时,\(A\times B\) 才有意义

Code

#include <cstdio>
using namespace std;
int n, m, k, a[107][107], b[107][107], c[107][107];

int main() {
    scanf("%d%d%d", &n, &m, &k)
    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) scanf("%d", &a[i][j]);
    for(int i = 1; i <= m; ++i) for(int j = 1; j <= k; ++j) scanf("%d", &b[i][j]);
    for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) for(int l = 1; l <= k; ++l) c[i][j] += a[i][l] * b[l][j];
    for(int i = 1; i <= n; ++i) {for(int j = 1; j <= k; ++j) printf("%d", c[i][j]); puts("");}
    return 0;
}
posted @ 2021-12-15 21:48  Eason_AC  阅读(155)  评论(0)    收藏  举报