这里我试图在20*20的网格中找到四个对角相邻的数字,它们的乘积是最大的。对角线从左上到右下。但是第一个循环出了问题:它没有遍历数组。我找不到它是什么。
function fouradjacentFinder(){
let mystring = "08 02 22 97 38 15 ..."
let myarray = mystring.split(" ").map(x =>Number(x));
let counter ;
let max = -Infinity;
for(let i = 0;i<myarray.length;i++){
counter= 0 ;
for(let k =21;;k+21 ){
myarray[i] = myarray[i]*myarray[k];
counter++
if(counter>4){
break;
}
if(myarray[i]>max){
max = myarray[i] ;
}
console.log(max)
}
return max;
}
}
几个问题:
- 您的缩进是关闭的,因此您错过了
return
语句在for
循环中发生的事实:因此它只执行一次迭代。始终正确缩进代码。 k+21
不修改k
。你需要输入k+=21
myarray[k]
与i
的值无关,不可能是正确的。要么将i
添加到该索引中,要么定义k
,使其包含i
的值。i
不应该迭代到myarray.length
,因为在最后几行中,不可能有一个有4个值的对角线。循环应该提前停止。
这是你的代码更正:
function fouradjacentFinder(){
let mystring = "08 02 22 97 38 15 ..."
// No need to have an anonymous function wrapper around Number
let myarray = mystring.split(" ").map(Number);
let max = -Infinity;
for (let i = 0; i + 3*21 < myarray.length; i++) { // Limit i
// Better not update myarray[i] and use separate variable
let product = 1;
for (let k = i; k < i+4*21; k += 21) { // fix k
product *= myarray[k];
}
if (product > max){
max = product;
}
}
return max; // outside loop
}