Answer
t.me/js_testОтвет:
const maxBeerBottles = (N, K) => {
let [result, empty, full] = [0, 0, N];
while (full > 0) {
result += full;
empty += full;
full = Math.floor(empty / K);
empty = empty % K;
}
return result;
};
Обьяснение:
Достаточно просто смоделировать процесс до тех пор, пока пустых бутылок не хватит даже на одну полную бутылку воды.
Алгоритм:
1) Заведем 3 переменные:
- result — для хранения конечного результата
- empty — количество пустых бутылок на текущей итерации
- full — количество полных бутылок на текущей итерации
2) Заведем цикл, цикл будет продолжаться до тех пор, пока количество полных бутылок больше 0.
3) Добавляем в результат текущее количество полных бутылок, после этого они автоматически становятся пустыми.
4) Обновляем перменные full, empty.
- Количество полных бутылок теперь будет — количество пустых бутылок сдаем в приемку, деля по обменному курсу.
- Количество пустых бутылок — это остаток от деления количества пустых бутылок на обменный курс.
Код для проверки:
const maxBeerBottles = (N, K) => {
let [result, empty, full] = [0, 0, N];
while (full > 0) {
result += full;
empty += full;
full = Math.floor(empty / K);
empty = empty % K;
}
return result;
};
console.log(maxBeerBottles(15, 4)); // 19