Сегодня мы собираемся создать функцию с именем howManyGames, которая будет принимать 4 целых числа в качестве входных данных: p, d, m и s.

Приближается Хэллоуин, и вы хотите покупать видеоигры. Вы идете в онлайн-магазин видеоигр, чтобы купить свои игры. Все игры продаются за p долларов, но поскольку сейчас распродажа на Хэллоуин, первая игра, которую вы купите, будет продаваться по p долларам, а каждая последующая игра, которую вы купите, будет стоить на d долларов меньше, чем предыдущая. Эта тенденция будет продолжаться до тех пор, пока цены на игры не станут меньше или равны m долларам. Когда это произойдет, все игры на тот момент будут стоить m долларов.

Ваш бюджет составляет s долларов, поэтому при покупке игр вы должны следить за тем, сколько денег у вас осталось в вашем кошельке. Цель функции - вывести, сколько игр вы можете купить на имеющуюся у вас сумму денег. Приведем пример:

let p = 20;
let d = 3;
let m = 6;
let s = 80;

Исходя из приведенных выше данных, первая игра, которую вы купите, будет стоить 20 долларов, а все последующие игры будут стоить на 3 доллара меньше, чем предыдущая. Когда игры начинают стоить 6 долларов или меньше, все последующие игры будут стоить 6 долларов. Всего у нас в кошельке 80 долларов.

20 – 0 = 20
20 – 3 = 17
17 – 3 = 14
14 - 3 = 11
11 - 3 = 8
8 - 3 = 6
...

Мы начинаем с 20 долларов, а затем начинаем вычитать 3 доллара каждый раз, когда покупаем игру. Мы продолжаем дисконтировать, пока не купим игру на общую сумму 6 долларов. Но чтобы отслеживать свои расходы, мы складываем затраты на игры:

20 + 17 + 14 + 11 + 8 + 6 = 76

Если бы мы купили дополнительную игру (еще 6 долларов), мы превысили бы бюджет на 2 доллара, поэтому мы остановимся на этом. Мы подсчитываем количество игр, на которые мы потратили 76 долларов, и получаем 7. Функция выдаст 7.

Давайте превратим это в код.

let totalCost = p;
let gameCount = 0;

Переменная totalCost будет содержать стоимость игр, которые мы покупаем. Мы будем использовать эту переменную и сравнивать ее с вводом s, чтобы узнать, в рамках бюджета ли мы.

Переменная gameCount будет содержать количество игр, которые мы можем купить в рамках нашего бюджета.

Далее мы создадим цикл while. Этот цикл while будет продолжаться до тех пор, пока totalCost не станет больше или равным сумме денег, которая есть в нашем кошельке, s. В этот момент, если мы продолжим работу, мы превысим бюджет, и цикл закончится.

while(totalCost <= s){
    p = p - d;
    if(p <= m){
      totalCost = totalCost + m;
      gameCount++;
    }else{
      totalCost = totalCost + p;
      gameCount++;
    }
    
}

Начиная с первой строки внутри нашего цикла, мы начинаем вычитать d долларов из нашей начальной стоимости игры, p для каждой игры.

Затем в нашем if-выражении мы проверяем, стоит ли игра, которую мы купили со скидкой, меньше или равна m. На этом этапе мы начинаем отслеживать общую стоимость игры. Если стоимость игры меньше или равна m, то каждая игра, которую мы покупаем, всегда будет стоить m. Добавляем стоимость в переменную totalCost.

Если купленная игра все еще больше, чем m, мы добавляем стоимость со скидкой в ​​переменную totalCost. В обоих случаях мы увеличиваем переменную gameCount, чтобы отслеживать, сколько игр мы купили.

Мы продолжаем цикл до тех пор, пока не выйдем за рамки бюджета. Цикл закончится, и мы вернем gameCount.

return gameCount;

Вот полный код:

function howManyGames(p, d, m, s) {

  let totalCost = p;
  let gameCount = 0;
  
  while(totalCost <= s){
    p = p - d;
    if(p <= m){
      totalCost = totalCost + m;
      gameCount++;
    }else{
      totalCost = totalCost + p;
      gameCount++;
    }
    
  }
  
  return gameCount;
}

На этом наш код завершен.

Вот некоторые из моих других алгоритмов JavaScript, которые вы можете проверить: