LuoguB2105 矩陣乘法 題解
阿新 • • 發佈:2021-12-15
LuoguB2105 矩陣乘法 題解
,按照公式直接求 \(A_{i,p}\) 和 \(B_{p,j}\) 的和,加入 \(C_{i,j}\) 中即可得到 \(C\) 矩陣。
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\) 矩陣的列數等於 \(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; }