У микроволновой печи есть табло, на котором отображается время приготовления пищи, круглая ручка, которую можно крутить вправо или влево, изменяя продолжительность работы, и одна кнопка.
Если поворачивать ручку вправо, то время на табло будет увеличиваться, а если поворачивать влево — уменьшаться. Величина изменения значения при повороте ручки зависит от того, какое время показывает табло в настоящий момент.
Если на табло меньше 30 секунд, то при повороте ручки значение изменится на 1 секунду;
Если на табло от 30 до 59 секунд, то при повороте ручки значение изменится на 5 секунд;
Если на табло не меньше 60 секунд и меньше 2 минут, то при повороте ручки значение изменится на 10 секунд;
Если на табло 2 минуты и больше, то при повороте ручки значение изменится на 1 минуту.
При этом время не может стать отрицательным, то есть если на табло горит 0 секунд, то при повороте ручки влево останется 0 секунд.
При нажатии на кнопку к времени, указанному на табло, всегда прибавляется ровно 30 секунд.
Поворот ручки вправо будем обозначать знаком «+», поворот ручки влево — знаком «—», а нажатие на кнопку — знаком «#».
Например, последовательность действий «#+#—» будет выполняться так.
Сначала на табло горит 0.
После нажатия на кнопку получилось 30 секунд. После поворота ручки вправо — 35 секунд. После нажатия на кнопку — 1 минута 5 секунд, после поворота ручки влево — 55 секунд.
Разные блюда нужно готовить в микроволновке разное время. Для каждого из указанных времён определите кратчайшую последовательность действий, позволяющую установить необходимую продолжительность работы;
начальным временем на табло примите 0.
Ответом на каждый вопрос является последовательность, содержащая только символы «+», «—» и «#». Если на какой-то вопрос существует несколько лучших ответов, то вы можете указать любой из них.
37 секунд:
3 минуты:
3 минуты 17 секунд:
3 минуты 19 секунд:
4 минуты 57 секунд:
1 Ответ
Давайте попробуем решим эту задачу.
нам известно, что начало работы = 30 сек. Если повернуть ручку в право, то увеличение идет на 1 сек, если влево, то уменьшение идет тоже на 1 сек. Если более 30 сек = 5 сек, если более 59 сек = 10 сек. Из этого получаем:
30 сек в право = 35 сек
1 мин 5 сек влево = 55 сек
Нам надо определить кратчайшую последовательность действий.
Решение:
directions = list(input())
result = 0
for i in directions: if i == ‘#’
result += 30
elif i == ‘+’
if result < 30
result += 1
elif 29 < result < 60
result += 5
elif 59 < result < 120
result += 10 else
result += 60
elif i == ‘—’
if result > 0
if result < 30
result -= 1
elif 29 < result < 60
result -= 5
elif 59 < result < 120
result -= 10 else
result -= 60 print(f’ { result // 60 } минуты { result % 60 } секунд’)
(1 сек + 1 сек + 30 сек + 5 сек) ++#+
(30 сек + 30 сек + 30 сек + 30 сек + 1 минута) ####+
(1 сек + 1 сек + 30 сек + 5 сек + 30 сек + 10 сек + 2 мин) ++#+#+####
(то же самое + 2 секунды) ++++#+#+####
(37 сек + 30 сек + 20 сек + 3 мин 30 сек) ++#+#++#######
37 минут Ответ: «++#+»
3 минуты Ответ: «####+».
3 мин 17 сек Ответ: «++#+##+#+».
3 мин 19 сек Ответ: «#—#-###+».
4 мин 57 сек Ответ: «#-++#####++».