Программа курса:
Разбор задачи: Бутылки с водой
Предложенный нами код решения:
def maxBottles(numBottles, numExchange):
"""
Вычисляет максимальное количество бутылок воды, которые можно выпить, с учетом обмена пустых бутылок.
:param numBottles: начальное количество полных бутылок
:param numExchange: количество пустых бутылок для обмена на одну полную
:return: максимальное количество бутылок воды, которые можно выпить
"""
total_drunk = numBottles # Начинаем с всех имеющихся бутылок
empty_bottles = numBottles # Пустые бутылки равны изначально выпитым
while empty_bottles >= numExchange:
# Обмениваем пустые бутылки на полные
new_bottles = empty_bottles // numExchange
total_drunk += new_bottles
# Остаток пустых бутылок после обмена
empty_bottles = empty_bottles % numExchange + new_bottles
return total_drunk1. Начальная инициализация
total_drunk = numBottles
empty_bottles = numBottles
- Переменная
total_drunkхранит общее количество выпитых бутылок. Изначально это равно числуnumBottles, так как все бутылки изначально полные. - Переменная
empty_bottlesотслеживает количество пустых бутылок, которые образуются после выпивания. Сначала это также равноnumBottles.
2. Обмен пустых бутылок
Цикл выполняется, пока есть достаточно пустых бутылок для обмена:
while empty_bottles >= numExchange:
- Условие проверяет, достаточно ли пустых бутылок для обмена.
Внутри цикла:
a. Расчет новых полных бутылок
new_bottles = empty_bottles // numExchange
- Вычисляется, сколько полных бутылок можно получить, обменяв пустые.
b. Увеличение общего количества выпитых бутылок
total_drunk += new_bottles
- Количество новых бутылок добавляется к общему числу выпитых бутылок.
c. Обновление числа пустых бутылок
empty_bottles = empty_bottles % numExchange + new_bottles
- Сначала вычисляется остаток пустых бутылок после обмена:
empty_bottles % numExchange. - Затем к остатку добавляются новые пустые бутылки, полученные из выпитых полных.
3. Возврат результата
Когда количество пустых бутылок становится меньше numExchange, обмен становится невозможным, и цикл завершается. Функция возвращает общее количество выпитых бутылок:
return total_drunk
Пример работы функции
Разберем пример с numBottles = 9 и numExchange = 3.
- Инициализация:
total_drunk = 9empty_bottles = 9
- Первый обмен:
new_bottles = 9 // 3 = 3total_drunk += 3 → total_drunk = 12empty_bottles = 9 % 3 + 3 = 3
- Второй обмен:
new_bottles = 3 // 3 = 1total_drunk += 1 → total_drunk = 13empty_bottles = 3 % 3 + 1 = 1
- Окончание цикла:
empty_bottles < numExchange, обмен невозможен.- Функция возвращает
total_drunk = 13.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии