Подсчет суммы каждый 7-й цикл while - PullRequest
0 голосов
/ 05 мая 2020

У меня проблемы с этой проблемой:

Напишите функцию с именем sumEvery7th, которая принимает неотрицательное целое число n и возвращает сумму целых чисел, делящуюся на 7. Используйте while l oop

Пока у меня есть этот код, но console.log(sumEvery7th(25)); выводит 63, когда должен выводить 42

function sumEvery7th(n){
  let sum=0;
  var i=7;
  while (i<=n) {
    i+=7
    sum+=i;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

Спасибо за помощь

Ответы [ 5 ]

0 голосов
/ 05 мая 2020

Вводится также номер приращения. int--
Выход из l oop, когда ввода больше не осталось. while (int > 0) {...
Проверка по модулю на каждой итерации. if (int % 7 === 0) {...
Когда будет найден коэффициент 7, добавьте его к sum. sum +=int

Сделал его немного более полезным, добавив второй параметр для фактора. Теперь вы можете использовать что-то кроме 7.

function sumOfFactors(int, fac) {
  let sum = 0;
  while (int > 0) {
    int--;
    if (int % fac === 0) {
      sum += int;
    }
  }
  return sum;
}

console.log(sumOfFactors(25, 7));
console.log(sumOfFactors(58, 7));
console.log(sumOfFactors(0, 7));
console.log(sumOfFactors(77, 7));
0 голосов
/ 05 мая 2020

Сумма строки + = i; должен стоять перед i + = 7

0 голосов
/ 05 мая 2020

Ваш лог c вышел из строя внутри for l oop. Есть два способа решить эту проблему:

Вам нужно увеличить сумму, а затем увеличить повторяемое значение. Просто переключите строку для увеличения i на 7, чтобы она была ниже суммы сложения, и вы можете go.

function sumEvery7th(n){
  let sum=0;
  var i=7;
  while (i<=n) {
    sum+=i;
    i+=7;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

Или вы можете установить i на 0 и получить то же самое результат

function sumEvery7th(n){
  let sum=0;
  var i=0;
  while (i<=n) {
    i+=7
    sum+=i;
  }
  return sum;
}

console.log(sumEvery7th(25)); // 7+14+21=42
console.log(sumEvery7th(0)); // expect 0

выберите то, что кажется вам более естественным, поскольку оба верны logi c.

Помните: порядок операций важен

0 голосов
/ 05 мая 2020

Просто измените порядок строк в while l oop

function sumEvery7th(n) {
  let sum = 0;
  var i = 7;
  while (i < n) {
    sum += i;
    i += 7

  }
  return sum;
}

console.log(sumEvery7th(25)); // 42
console.log(sumEvery7th(0)); // 0
0 голосов
/ 05 мая 2020

Попробуйте с for l oop:

const sumEvery7th = (n) => {
    let sum = 0;

    for (let i = 7; i <= n; i += 7) {
	sum += i;
    }

    return sum;
}

console.log("50 -> ", sumEvery7th(50));
console.log("25 -> ", sumEvery7th(25));
console.log("7 -> ", sumEvery7th(7));
console.log("6 -> ", sumEvery7th(6));
console.log("0 -> ", sumEvery7th(0));
.as-console-wrapper{min-height: 100%!important; top: 0;}
...