JS задача с циклом

Нужно написать цикл, который перебирает числа от 4 до 37 и выполняет следующие действия:

  • Если число кратно 2, но не кратно 4, то прибавляет его к результату;
  • Если число кратно 3, то отнимает его от результата;
  • Если число кратно 4, то умножает его на результат;
  • Если число кратно 5, то просто выводит в консоль это число и не изменяет результат (даже если число подпадает под условия выше);
  • Если число не попадает под условия выше, то пропускает его.

Число должно попадать только под одно условие. Если число пападает под несколько условий - выполнится должно первое из них.

const m = 4;
const n = 37;
let result = 0;

for (let i = m; i <= n; i++) {
  if (i % 2 == false && i % 4) {
    result += i;
  }
  if (i % 3 == false) {
    result -= i;
  }
  if (i % 4 == false) {
    result *= i;
  }
  if (i % 5 == false) {
    result = i;
    console.log(result);
  }
}

Этот вариант неправильный.


Ответы (1 шт):

Автор решения: Zhihar

ну так прочитайте условие внимательнее - вы же сами ему противоречите:

Если число пападает под несколько условий - выполнится должно первое из них.

это значит у вас минимум должно использоваться или else if или contunue

типа:

  if(i%2 == false && i%4){
    result += i;
  } 
  else if(i%3 == false){
    result -= i;
  }

или

  if(i%2 == false && i%4){
    result += i;
    continue;
  }
  if(i%3 == false){
    result -= i;
    continue;
  }

читаем условие дальше:

Если число кратно 5, то просто выводит в консоль это число и не изменяет результат (даже если число подпадает под условия выше)

это значит, что проверка должна быть самой первой в принципе

  if(i%5 == 0){
    console.log(i);
  }
  else
  {
      if(i%2 == false && i%4){
        result += i;
      } 
      else if(i%3 == false){
        result -= i;
      }
  }

Потом просто как замечание - модуль от деления - это число, а не булево значение, так и сравнивайте с числом, меньше потом путаницы будет

И еще одно замечание - код можно чуть упростить - если число кратно 2 и не кратно 4, то это означает ровно то, что остаток от деления на 4 равен... 2

if (i % 4 == 2)

тем самым можно избежать двойных проверок - просто код чуть покомпактнее будет

→ Ссылка