【问题标题】:Problem with the output of a for...loop - JavaScriptfor...循环的输出问​​题 - JavaScript
【发布时间】:2022-11-15 06:29:07
【问题描述】:

我正在解决一个 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

【问题讨论】:

    标签: javascript loops math


    【解决方案1】:

    您忘记添加一个简单的检查,即 i + diff 必须小于 numsAndDivs.length。在你的情况下它得到了 100,并且 numsAndDivs 中没有索引 100 的数组。因此错误。

    if (i+ diff < numsAndDivs.length && numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){
            equalDivs++;
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多