方阵中的最大乘积
Posted superlizhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方阵中的最大乘积相关的知识,希望对你有一定的参考价值。
题目
在这个 n×n 方阵中,4个在同一方向(从下至上、从上至下、从右至左、从左至右或者对角线)上相邻的数的乘积最大是多少?
代码一
把乘积先存在一个数组里,然后从成绩数组里找最大值。
const testGrid = [
[40, 17, 81, 18, 57],
[74, 4, 36, 16, 29],
[36, 42, 69, 73, 45],
[51, 54, 69, 16, 92],
[7, 97, 57, 32, 16]
];
function largestGridProduct(arr) {
let len = arr.length;
largest = arr[0][0]
//横向的4位数之和
console.log('横向的4位数之和')
for (let row = 0; row < len; row++) {
for (let col = 0; col < len - 3; col++) {
console.log(arr[row][col], arr[row][col + 1], arr[row][col + 2], arr[row][col + 3])
largest = getLargest(arr[row][col] * arr[row][col + 1] * arr[row][col + 2] * arr[row][col + 3])
}
}
//纵向的4位数之和
console.log('纵向的4位数之和')
for (let row = 0; row < len - 3; row++) {
for (let col = 0; col < len; col++) {
console.log(arr[row][col], arr[row + 1][col], arr[row + 2][col], arr[row + 3][col])
largest = getLargest(arr[row][col] * arr[row + 1][col] * arr[row + 2][col] * arr[row + 3][col])
}
}
console.log('对角线4为数之和')
//对角线4为数之和
for (let row = 0; row < len - 3; row++) {
for (let col = 0; col < len - 3; col++) {
console.log(arr[row][col], arr[row + 1][col + 1], arr[row + 2][col + 2], arr[row + 3][col + 3])
largest = getLargest(arr[row][col] * arr[row + 1][col + 1] * arr[row + 2][col + 2] * arr[row + 3][col + 3])
}
}
console.log('/对角线4为数之和')
///对角线4为数之和
for (let row = 3; row < len; row++) {
for (let col = 3; col < len; col++) {
console.log(arr[row][col], arr[row - 1][col - 1], arr[row - 2][col - 2], arr[row - 3][col - 3])
largest = getLargest(arr[row][col] * arr[row - 1][col - 1] * arr[row - 2][col - 2] * arr[row - 3][col - 3])
}
}
console.log(largest)
return largest;
}
function fun() {
let largest = 0;
return function (n) {
if (n > largest) {
largest = n;
}
return largest
}
}
let getLargest = fun();
largestGridProduct(testGrid);
代码二
用闭包,存最大值
const testGrid = [
[40, 17, 81, 18, 57],
[74, 4, 36, 16, 29],
[36, 42, 69, 73, 45],
[51, 54, 69, 16, 92],
[7, 97, 57, 32, 16]
];
function largestGridProduct(arr) {
let len = arr.length;
productArr = [];
//横向的4位数之和
console.log('横向的4位数之和')
for (let row = 0; row < len; row++) {
for (let col = 0; col < len - 3; col++) {
console.log(arr[row][col], arr[row][col + 1], arr[row][col + 2], arr[row][col + 3])
productArr.push(arr[row][col] * arr[row][col + 1] * arr[row][col + 2] * arr[row][col + 3])
}
}
//纵向的4位数之和
console.log('纵向的4位数之和')
for (let row = 0; row < len - 3; row++) {
for (let col = 0; col < len; col++) {
console.log(arr[row][col], arr[row + 1][col], arr[row + 2][col], arr[row + 3][col])
productArr.push(arr[row][col] * arr[row + 1][col] * arr[row + 2][col] * arr[row + 3][col])
}
}
console.log('对角线4为数之和')
//对角线4为数之和
for (let row = 0; row < len - 3; row++) {
for (let col = 0; col < len - 3; col++) {
console.log(arr[row][col], arr[row + 1][col + 1], arr[row + 2][col + 2], arr[row + 3][col + 3])
productArr.push(arr[row][col] * arr[row + 1][col + 1] * arr[row + 2][col + 2] * arr[row + 3][col + 3])
}
}
console.log('/对角线4为数之和')
///对角线4为数之和
for (let row = 3; row < len; row++) {
for (let col = 3; col < len; col++) {
console.log(arr[row][col], arr[row - 1][col - 1], arr[row - 2][col - 2], arr[row - 3][col - 3])
productArr.push(arr[row][col] * arr[row - 1][col - 1] * arr[row - 2][col - 2] * arr[row - 3][col - 3])
}
}
console.log(fun(productArr))
return fun(productArr);
}
function fun(arr) {
let n = 0;
for (i of arr) {
if (i > n) {
n = i
}
}
return n
}
largestGridProduct(testGrid);
以上是关于方阵中的最大乘积的主要内容,如果未能解决你的问题,请参考以下文章