Условие: № 27299
• Статья подготовлена командой itpy, подписывайтесь на наш телеграм канал!
К исходной строке, содержащей более 60 единиц и не содержащей других символов, применили приведённую выше программу.
В результате получилась строка 221. Какое наименьшее количество единиц могло быть в исходной строке?
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 2)
заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ
# Код решения Вариант 1
def F(s):
while '111' in s:
s = s.replace('111', '2', 1)
s = s.replace('222', '1', 1)
return s
for x in range(60, 100):
if F('1' * x) == '221':
print(x)
break
Комментарии к первому варианту решения задачи:
- создаем функцию, которая будет принимать и обрабатывать нашу строку
- ПОКА нашлась подстрока “111” цикл while будет выполнять действия
- в таком случае заменим подстроку ”111” на ”2” именно 1 раз
- в таком случае заменим подстроку ”222” на ”1” именно 1 раз
- когда цикл заканчивается возвращаем полученную строку
- делаем перебор количества единиц ( от 60 до 100, т.к. в условии сказано, что единиц в строке было больше 60)
- вызываем функцию, и если исходная строка, содержащая более 60 единиц стала равна ‘221’
- то выводим количество единиц
- завершаем цикл, т.к. первое число и будет минимальным
# Код решения Вариант 2
for x in range(60, 100):
s = '1' * x
while '111' in s:
s = s.replace('111', '2', 1)
s = s.replace('222', '1', 1)
if s == '221':
print(x)
break
Комментарии ко второму варианту решения задачи:
- делаем перебор количества единиц (от 60 до 100, т.к. в условии сказано, что единиц в строке было больше 60)
- создаем нашу строку
- ПОКА нашлась подстрока “111” цикл while будет выполнять действия
- в таком случае заменим подстроку ”111” на ”2” именно 1 раз
- в таком случае заменим подстроку ”222” на ”1” именно 1 раз
- если исходная строка, содержащая более 60 единиц стала равна ‘221’
- то выводим количество единиц
- завершаем цикл, т.к. первое число и будет минимальным