ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 6217. Авторская задача

Исполнитель Водолей переливает воду между тремя колбами А, В и С.

Водолей имеет три команды: Наполни А/В/С — наполняет одну из колб, указанную в команде (например, команда Наполни А полностью наполняет колбу А); Вылей А/В/С — опустошает одну из колб, указанную в команде (например, команда Вылей A опустошит колбу A).; Перелей из А/В/С в А/В/С — переливает воду из колбы_1, название которой указано после слова «из», в колбу_2, имя которой указано после слова «в». Если колба_2 может поместить весь объем воды из колбы_1, то переливается вся вода, если нет, переливается только то количество, которое колба_2 может вместить, не поместившийся в колбу_2 объем, остается в колбе_1.

Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.

Колба А имеет объем 5 литров, В – 3 литра, С – 12 литров. Изначально все колбы пустые.

Определите, сколько литров воды окажется в колбе C после выполнения следующего алгоритма:

Повтори 15 [
Наполни А
Перелей из A в B
Перелей из A в C
Вылей B
Перелей из С в B]

flasks = {'A': 0, 'B': 0, 'C': 0}
max_volume = {'A': 5, 'B': 3, 'C': 12}
a, b, c = "ABC"


# Наполнить
def fill(n):
    flasks[n] = max_volume[n]


# Вылить
def pour_out(n):
    flasks[n] = 0


# Перелить из a в b
def pour_over(a, b):
    if flasks[b] + flasks[a] <= max_volume[b]:
        flasks[b] += flasks[a]
        flasks[a] = 0
    else:
        volume = max_volume[b] - flasks[b]
        flasks[b] = max_volume[b]
        flasks[a] -= volume


for _ in range(15):
    fill(a)
    pour_over(a, b)
    pour_over(a, c)
    pour_out(b)
    pour_over(c, b)

print(flasks[c])
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие