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

216
10 июня 2022, 11:00

Нужно написать цикл, который перебирает числа от 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);
  }
}

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

Answer 1

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

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

это значит у вас минимум должно использоваться или 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)

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

READ ALSO
Склонение слов по русским падежам

Склонение слов по русским падежам

Подскажите, почему неверно склоняются слова

211
Как подключить SwiperJS по npm на NuxtJS?

Как подключить SwiperJS по npm на NuxtJS?

Как подключить SwiperJS по npm на NuxtJS?

246
Анимировать выделение шрифта на кривой SVG

Анимировать выделение шрифта на кривой SVG

У меня есть текст, который движется по кругу SVG, и который масштабируется в зависимости от размера окна - Я хочу анимировать текст так, чтобы...

192
Увеличение переменной с input кнопкой - кастомный вариант?

Увеличение переменной с input кнопкой - кастомный вариант?

Как реализовать нативным JavaScript, чтобы я брал переменную с input и ещё увеличивал по клику на единицу? Обычный input type="number" не подходит, потому...

190