我正在解决一个JavaScript挑战问题查找具有相同数量的除数的数字,并在代码末尾遇到一些麻烦,其中涉及for循环。
问题:
求1和
NMax
之间所有的数对,它们是diff
的数,并且有相同数量的因数。
例如:对于1到50之间的数字,有8个数字具有相同的除数:[[2,3],[14,15],[21,22],[26,27],[33,34],[34,35],[38,39],[44,45]]
在下面的代码中,count_pairsInt(1,50)
将返回8,但count_pairsInt (3,100)
返回TypeError: Cannot read properties of undefined (reading '1')
。
我几乎可以肯定,最后一个for循环出了问题,但我不太清楚是什么问题。有人能帮我一下吗?
function countPairsInt(diff, nMax) {
const numbers = [];
for (let i=1; i<=nMax; i++) {
numbers.push(i);
}
// divisors loops over each number passed in and returns the number of divisors for that number
function divisors(num) {
let divs = [];
for (let i=1; i<=num; i++) {
if (num % i === 0) divs.push(i);
}
return divs;
}
// create an array of arrays, each subarray contains the number and it's number of divisors by passing map over the numbers array.
const numsAndDivs = numbers.map(x=> [x, divisors(x).length]);
let equalDivs = 0;
for (let i=1; i<numsAndDivs.length-1; i++) {
if (numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){
equalDivs++;
}
}
return equalDivs
}
countPairsInt(1, 50); // returns 8
countPairsInt(3, 100) // should return 7
您忘记添加一个简单的检查,即i + diff必须小于numsanddiv .length。在你的例子中,它得到的是100而numsanddiv中没有索引为100的数组。因此出现了错误。
if (i+ diff < numsAndDivs.length && numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){
equalDivs++;
}