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));
这道题本身题目不难,难点就看你够不够细。