JavaScript题解 | #矩阵乘法#
矩阵乘法
https://www.nowcoder.com/practice/ebe941260f8c4210aa8c17e99cbc663b
const rl = require("readline").createInterface({
input: process.stdin,
output: process.output,
});
const inputs = [];
rl.on("line", (line) => {
inputs.push(line);
}).on("close", () => {
resolve(inputs);
});
function resolve(inputs) {
// inputs 输入都是字符串,需要做处理
const f_row = parseInt(inputs[0]), // x
f_col = parseInt(inputs[1]), // y
t_row = parseInt(inputs[1]), // y
t_col = parseInt(inputs[2]); // z
const f_martix = [],
t_martix = [];
// index 可以正确表示矩阵的行数
for (let i = 3, index = 0; i < 3 + f_row; i++, index++) {
const temp = inputs[i].split(" ");
f_martix[index] = temp.slice(0, f_col);
}
const startRow = 3 + f_row;
for (let t = startRow, index = 0; t < startRow + t_row; t++, index++) {
const temp = inputs[t].split(" ");
t_martix[index] = temp.slice(0, t_col);
}
const res = computedMarix(f_martix, t_martix);
for (let i = 0; i < res.length; i++) {
console.log(res[i].join(" "));
}
}
function computedMarix(f, t) {
let res = [];
// 数组没有初始化为二维数组,就不要用 res[i][j]
for (let i = 0; i < f.length; i++) {
let jArr = [];
for (let j = 0; j < t[0].length; j++) {
let num = 0;
for (let k = 0; k < t.length; k++) {
num += parseInt(f[i][k]) * parseInt(t[k][j]);
}
jArr.push(num);
}
res.push(jArr);
}
return res;
}
思路:
模拟题,先找出两个矩阵,然后进行行列式的计算,最后输出结果。
行列式的计算题目还给出了公式,这就更简单了,实现公式即可。难点在于二维数组的表示,上述代码中如果你使用 `res[i][j] = xxx` 这样的表达式是会报错的,因为本身初始化的是一维数组。
除非你初始化为二维数组:
let d_arr = new Array(m).fill(1).map(() => new Array(n).fill(1));
这道题本身题目不难,难点就看你够不够细。
