Skip to content

Instantly share code, notes, and snippets.

@mariohuq
Created November 15, 2019 17:29
Show Gist options
  • Save mariohuq/c28233a4569fe704129a726eb33b6315 to your computer and use it in GitHub Desktop.
Save mariohuq/c28233a4569fe704129a726eb33b6315 to your computer and use it in GitHub Desktop.
Численное решение задачи из онлайн-курса Савватеева
"""
Численное решение задачи из онлайн-курса openedu.ru/course/mipt/MATAN/
Трое друзей A, B, C хотят разделить между собой 1 литр некоторого напитка.
Проблема в том, что они умеют делить только пополам.
Поэтому поступают следующим образом.
Сначала весь напиток находится в кружке у A, а кружки у B и C пустые.
Затем половина содержимого кружки A поровну добавляется в кружки B и C.
После этого половина содержимого кружки B поровну добавляется в кружки A и C.
На следующем шаге половина содержимого кружки C поровну добавляется в кружки A и B.
И так далее, много раз:
половина содержимого очередной кружки
(по циклу: A, B, C, A, B, C, ...)
поровну добавляется в остальные кружки.
Введите количество напитка (в литрах) в каждой кружке в установившемся режиме,
в порядке возрастания (начиная с наименьшего количества и заканчивая наибольшим).
Записывать нужно в виде дроби: 1/2 или 5/2 или 2/4.
Пока что не требуется обоснование, просто дайте ответы.
"""
def step(a, b, c):
# половина содержимого кружки A поровну добавляется в кружки B и C.
a, b, c = a * 2, b * 4 + a, c * 4 + a
# половина содержимого кружки B поровну добавляется в кружки A и C.
a, b, c = a * 4 + b, b * 2, c * 4 + b
# половина содержимого кружки C поровну добавляется в кружки A и B.
a, b, c = a * 4 + c, b * 4 + c, c * 2
return a, b, c
# Сначала весь напиток находится в кружке у A, а кружки у B и C пустые.
a, b, c = 1, 0, 0
for i in range(1,20):
a, b, c = step(a, b, c)
s = a + b + c
print(*sorted([a/s, b/s, c/s]), sep='\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment