Считая каждый пятый для цикла - PullRequest
1 голос
/ 03 ноября 2019

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

Напишите функцию с именем sumEvery5th, которая принимает неотрицательное целое число n и возвращает сумму целых чисел, кратных 5 изОт 1 до n, включая n. Используйте for петлю.

Это то, что у меня есть до сих пор:

var sumEvery5th = function(n){

    let sum = 0;
    for(let i = 1; n % 5 == 0; i++){
        sum+ i
    };
    return sum;
}

Я чувствую, что я действительно близко. Заранее спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 03 ноября 2019

Чистая математика, без решения цикла:

var sumEvery5th = function(n) {
  n = Math.floor(n / 5);
  return 5 * n * (n + 1) / 2;
}

console.log(sumEvery5th(10)); // 5 + 10 = 15
console.log(sumEvery5th(18)); 
console.log(sumEvery5th(20));
3 голосов
/ 03 ноября 2019

Вы можете начать свой цикл с 5, так как 1, 2 ... не делятся на 5. И вместо i++ вы можете сразу перейти к 5 на 5, пока i не станет больше, чем n:

var sumEvery5th = function(n) {
  let sum = 0;
  for (let i = 5; i <= n; i += 5) {
    sum += i;
  };
  return sum;
}

console.log(sumEvery5th(10)); // 5 + 10 = 15
console.log(sumEvery5th(18)); // 5 + 10 + 15 = 30
2 голосов
/ 03 ноября 2019

Сначала я думаю, вы должны понять, как работает цикл for.

var sumEvery5th = function(n){
    let sum = 0;
    for(let i = 1; n % 5 == 0; i++){
        sum+ i
    };
    return sum;
}

Шаг за шагом вы делаете следующее:

  1. Объявление переменной i со значением 1.
  2. Деление n на 5 и взятие значения остатка и сравнение его с 0. В случае, если это правда, вы пропускаете блок кода внутри for и движетесь к return sum;line.
  3. (Если вы не пропустили блок кода на шаге 2) Запустите блок кода с новым значением i.
  4. (Если вы не пропустилиблок кода на шаге 2) Увеличение значения i.
  5. Вернитесь к шагу 2.

Обычно ваше for условие зависит от объявленной переменнойв шаге 1. То, что вы хотите сделать, это выполнить for кодовый блок n раз. Для этого вам нужно изменить ваше состояние с n % 5 == 0 на i <= n. Это обеспечит запуск блока кода, когда ваш i меньше или равен n, начиная со значения 1.

Теперь внутри вашего блока кода вы добавляете логику divisible by 5,проверка значения i.

for(let i = 1; i <= n; i++){
    if (i%5 == 0) sum += i;
};

Теперь, допустим, я вызвал sumEvery5th (5).

  1. Объявите переменную i со значением 1.
  2. Проверкаесли i (1) меньше или равно n (5).
  3. Войдите в блок кода.
  4. Проверьте, равен ли i% 5 0.
  5. Это не так.
  6. Инкремент i, теперь i = 2.
  7. Проверьте, что i (2) меньше или равно n (5). ... И так далее, пока i = 6, и в этом случае блок кода пропускается, и программа продолжит свой ход.

Ps .: Существуют способы улучшить производительность этогоалгоритм, но теперь, когда вы немного лучше понимаете свой цикл for, я оставлю его вам:)

0 голосов
/ 03 ноября 2019
var sumEvery5th = function(n){

    let sum = 0;
    for(let i = 1; i <= n; i++){
        if (i % 5 === 0) {
            sum += i;
        }
    }
    return sum;
}
...