Мой друг Джон любит ходить в кино.Он может выбирать между системой A и системой B.
Система A : каждый раз покупать билет (15 долларов)
Система B : покупатькарту (500 долларов) и каждый раз покупайте билет, цена которого в 0,90 раза превышает цену, которую он заплатил за предыдущий.
Пример: если Джон идет в кино 3 раза:
System A : 15 * 3 = 45
System B : 500 + 15 * 0.90 + (15 * 0.90) * 0.90 + (15 * 0.90 * 0.90) * 0.90
( = 536.5849999999999, no rounding for each ticket)
Джон хочет знать, сколько раз он должен ходить в кино, чтобы конечный результат Системы B, при округлении до следующего доллара, был дешевле, чем у Системы A.
Функциональный фильмимеет 3 параметра: card (цена карты), ticket (обычная цена билета), perc (часть того, что он заплатил за предыдущий билет) и возвращает первый n такой, что
ceil(price of System B) < price of System A.
Дополнительные примеры:
movie(500, 15, 0.9) should return 43
(with card the total price is 634, with tickets 645)
movie(100, 10, 0.95) should return 24
(with card the total price is 235, with tickets 240)
Я написал этот код, но получил сообщение об истечении времени ожидания на веб-странице.Может кто-нибудь предложить мне, как я могу написать более быстрый код, чем этот?
function movie(card, ticket, perc) {
var WithTicketPrice = 0;
var WithCardPrice = card+ticket*perc;
var Counter = 1;
while (WithTicketPrice <= Math.ceil(WithCardPrice)) {
WithTicketPrice = WithTicketPrice + ticket;
WithCardPrice = WithCardPrice + (ticket*Math.pow(perc, Counter)*perc);
Counter++;
}
return Counter-1;
};