数的总和可被数组中的项整除(余数)-嵌套循环

时间:2019-05-13 17:24:36

标签: javascript

因此,我在本文的结论中发现了这个问题: https://medium.com/@popflorin1705/javascript-coding-challenge-1-6d9c712963d2

我想做的是将所有可被提供数组中的每个项目均等地整除的数字相加。在我的代码中,我想将所有可被0、5、10、12等除的数字加到我指定的任何数字(调用时为sumOfMultiples(x))。

而且,在某些情况下,当数组中只有一项时,我已经能够获得正确的答案,但是向数组中添加其他项会导致sum =0。为什么会这样?

我是编程的新手,所以如果您的解决方案可能坚持使用嵌套循环或.forEach,则对我来说更有意义。不仅在寻找解决方案,而且我想了解该问题的结构/我所缺少的。

我提供的代码与我认为的最接近,因此从我的角度出发最合乎逻辑。

谢谢!

Instantiate

2 个答案:

答案 0 :(得分:0)

您当前的代码基本上可以做到:

  • 遍历所有应该被整除的数字,即5、10和12。

    • 遍历所有数字直到数字

    • 如果数字是可分割的,请将其添加到结果中。

    • 返回总和(为时过早,因为外部循环尚未完成)

现在,如果您以60为例,那么它们都将被5、10和12整除,因此将其相加三倍。

您应该反转循环

  let result = 0;

  outer: for(let n = 1; n <= number; n++) {
    for(let divider of [5, 10, 12]) {
      if(n % divider !== 0) continue outer;
    }
    result += n;
 }

 return result;

但是那是非常低效的。相反,您可以选择最大的数字(在这种情况下为12),然后将其所有倍数与其他数字(12、24,...)进行比较。

  let result = 0;
  const dividers = [5, 10, 12];
  const biggest = dividers.pop();

  for(let n = biggest; n < number; n += biggest) {
    if(dividers.every(divider => n % divider === 0))
      result += n;
  }

答案 1 :(得分:0)

好,所以我知道了!我在if语句中缺少[x]来表示数组中的单个项目将充当模数(如果这就是所谓的模数)。结果代码如下:

function sumOfMultiples(number) {
    let numb = [5, 10, 12];
    let sum = 0;
    for (let x=0; x<=numb.length; x++){
        for (let i=0; i<number; i++) {
            if(i % numb[x] === 0){
                sum += i;
            }
        }
    }
    return sum;        
}

如果它可以被多个数组项整除,它的确会计数两次,但是我会解决这个问题。

无论如何,谢谢大家的帮助!