Помогите с задачей на питоне! но решить математически - Общение Python мододелов

Вопрос Помогите с задачей на питоне! но решить математически

Регистрация
16 Окт 2013
Сообщения
90
Репутация
-2
Спасибо
0
Монет
0
На уроке зельеварения профессор Северус Снегг задал задачу: разделить оборотное зелье ровно пополам, не имея для этого весов, а используя только сосуды меньшего объема.



Оборотное зелье находится в сосуде A

объемом 20

унций и занимает его полностью. Имеется также два пустых сосуда: сосуд B

объемом 12

унций и сосуд C

объемом 7

унций.





Входные данные

На сосудах нет делений, поэтому в результате каждого переливания должно выполняться хотя бы одно из двух условий:



Один из сосудов, участвовавших в переливании, становится пустым;

Один из сосудов, участвовавших в переливании, становится полным.

Каждую команду переливания пишите так: сначала название сосуда откуда переливаем, потом знак «>

», и после название сосуда, куда переливаем.



Например, команда

A>B

означает, что переливание происходит из сосуда A

в сосуд B

.



Если изначально в сосуде A

было 20

унций, а сосуд B

был пустой, то в результате переливания A>B

сосуд B

станет полным, и в нем будет налито 12

унций зелья, а в сосуде A

останется 8

унций.



Если изначально в сосуде A

была 1

унция, а в сосуде C

– 7

унций, то в результате команды C>A

сосуд C

станет пустым, а в сосуде A

будет 8

унций зелья.



Составьте алгоритм переливаний, позволяющий получить в сосуде A

ровно 10

унций зелья. Каждую команду пишите в отдельной строке. Чем меньше команд получится в алгоритме, тем больше баллов он получит.



Каждую команду пишите в новой строке.



В построенном алгоритме не должно быть команд, которые:



пытаются сделать переливание из сосуда, который уже пуст;

выполняют переливание в сосуд, который уже полон.
 
Регистрация
12 Июн 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Чтобы получить ровно 10 унций зелья в сосуде A, можно воспользоваться следующими шагами, начиная с текущего состояния:
Состояние:
A: 10 унций
B: 0 унций
C: 0 унций
Минимальные шаги для достижения цели
Переливаем из A в B:
A: 10 унций → 8 унций
B: 0 унций → 2 унции
Переливаем из B в C:
B: 2 унции → 0 унций
C: 0 унций → 2 унции
Переливаем из C в B:
C: 2 унции → 0 унций
B: 0 унций → 2 унции
Переливаем из B в A:
B: 2 унции → 0 унций
A: 8 унций → 10 унций
Теперь в сосуде A снова ровно 10 унций зелья.
Итоговое состояние
A: 10 унций
B: 0 унций
C: 0 унций
Таким образом, для достижения цели вам потребуется всего 4 шага!
 
Регистрация
2 Апр 2013
Сообщения
65
Репутация
-3
Спасибо
0
Монет
0
A>B
B>C
C>A
B>C
A>B
B>C
C>A
A>B
Переливаем из A в B до полного заполнения B.

A: 20 → 8 унций
B: 0 → 12 унций
C: 0 унций
B>C
Переливаем из B в C до полного заполнения C.

A: 8 унций
B: 12 → 5 унций
C: 0 → 7 унций
C>A
Переливаем из C обратно в A.

A: 8 → 15 унций
B: 5 унций
C: 7 → 0 унций
B>C
Переливаем из B в C до полного заполнения C.

A: 15 унций
B: 5 → 0 унций
C: 0 → 5 унций
A>B
Переливаем из A в B до полного заполнения B.

A: 15 → 3 унций
B: 0 → 12 унций
C: 5 унций
B>C
Переливаем из B в C до полного заполнения C.

A: 3 унций
B: 12 → 10 унций
C: 5 → 7 унций
C>A
Переливаем из C обратно в A.

A: 3 → 10 унций
B: 10 унций
C: 7 → 0 унций
В результате этих переливаний в сосуде A окажется ровно 10 унций зелья.

Итоговое состояние сосудов:
A: 10 унций
B: 10 унций
C: 0 унций
 
Сверху Снизу