我正在解決一個 JavaScript 挑戰問題Find Numbers with the Same Amount of Divisors并且在我的代碼末尾遇到了一些涉及 for 回圈的問題。
問題:
找出 1 到 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
uj5u.com熱心網友回復:
您忘記添加一個簡單的檢查,即 i diff 必須小于 numsAndDivs.length。它在你的例子中得到 100,并且在 numsAndDivs 中沒有索引 100 的陣列。因此錯誤。
if (i diff < numsAndDivs.length && numsAndDivs[i][1] === numsAndDivs[i diff][1] ){
equalDivs ;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/534265.html
上一篇:如何只顯示一次串列的最終計算結果而不顯示與串列中的專案一樣多的次數?
下一篇:如何將這些倒金字塔并排列印?
