描述
对于给定的 x 行 y 列的矩阵:
A=⎣⎢⎢⎢⎡A1,1A2,1⋮Ax,1A1,2A2,2⋮Ax,2⋯⋯⋱⋯A1,yA2,y⋮Ax,y⎦⎥⎥⎥⎤
和 y 行 z 列的矩阵:
B=⎣⎢⎢⎢⎡B1,1B2,1⋮By,1B1,2B2,2⋮By,2⋯⋯⋱⋯B1,zB2,z⋮By,z⎦⎥⎥⎥⎤
计算矩阵 A 和矩阵 B 的乘积 C。
让我们回忆矩阵乘法的计算,对于第 i 行第 j 列的元素 Ci,j(1≦i≦x; 1≦j≦z),有:
Ci,j=k=1∑y(Ai,k×Bk,j)
输入描述:
第一行输入一个整数 x(1≦x≦100) 代表第一个矩阵的行数。
第二行输入一个整数 y(1≦y≦100) 代表第一个矩阵的列数和第二个矩阵的行数。
第三行输入一个整数 z(1≦z≦100) 代表第二个矩阵的列数。
此后 x 行,第 i 行输入 y 个整数 Ai,1,Ai,2,…,Ai,y(0≦Ai,j≦10) 代表矩阵 A 的第 i 行元素。
此后 y 行,第 i 行输入 z 个整数 Bi,1,Bi,2,…,Bi,z(0≦Bi,j≦10) 代表矩阵 B 的第 i 行元素。
输出描述:
输出 x 行,第 i 行输出 z 个整数,代表矩阵 C 的第 i 行元素。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
const input = [];
while ((line = await readline())) {
input.push(line);
}
let x = parseInt(input[0]); // 矩阵 A 的行数
let y = parseInt(input[1]); // 矩阵 A 的列数和矩阵 B 的行数
let z = parseInt(input[2]); // 矩阵 B 的列数
// 初始化矩阵 A 和 B
let matrixA = [];
let matrixB = [];
// 读取矩阵 A 的数据
for (let i = 0; i < x; i++) {
matrixA.push(input[i + 3].split(" ").map(Number));
}
// 读取矩阵 B 的数据
for (let i = 0; i < y; i++) {
matrixB.push(input[i + 3 + x].split(" ").map(Number));
}
// 初始化结果矩阵 C
let matrixC = Array.from({ length: x }, () => Array(z).fill(0));
// 矩阵相乘
for (let i = 0; i < x; i++) {
for (let j = 0; j < z; j++) {
for (let k = 0; k < y; k++) {
matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
}
}
}
// 输出结果矩阵 C
for (let i = 0; i < x; i++) {
console.log(matrixC[i].join(" "));
}
})();