Задача #1949

Исполнитель Черепаха

Уровень ЕГЭ

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

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

Запись Повтори k раз Команды конец означает, что последовательность Команд повторится k раз.

Колба А имеет объем 3 литра, В – 6 литров, С – 8 литра.

Исполнителю был задан следующий алгоритм:

Повтори N раз
Наполни C
Перелей из C в A
Перелей из C в B
Перелей из А в B
Вылей B
Конец
Перелей из A в B
Перелей из С в В

Укажите минимальное значение N, при котором в результате выполнения этого алгоритма в колбе В окажется 5 литров.

Ответ
Войдите, чтобы история ответов и статистика сохранялись.
Решение Нажми, чтобы открыть

Ответ

3
mx = {'A': 3, 'B': 6, 'C': 8}
a, b, c = 'ABC'
def nap(n):
colbes[n] = mx[n]

def vyl(n):
colbes[n] = 0

def per(a, b):
if colbes[b] + colbes[a] <= mx[b]:
colbes[b] += colbes[a]
colbes[a] = 0
else:
v = mx[b] - colbes[b]
colbes[b] = mx[b]
colbes[a] -= v

for N in range(1000):
colbes = {'A': 0, 'B': 0, 'C': 0}
for _ in range(N):
nap(c)
per(c, a)
per(c, b)
per(a, b)
vyl(b)
per(a, b)
per(c, b)
if colbes[b] == 5:
print(N)
break
Быстрый переход
Перейти к задаче