Сегодня мы собираемся создать функцию с именем 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, которые вы можете проверить: