Задача. Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
заменить (v, w) заменяет подстроку v на w (первое слева вхождение)
нашлось (v) проверяет, нашлась ли подстрока v
Дана программа для исполнителя Редактор:
ПОКА нашлось (555) ИЛИ нашлось (333)
ЕСЛИ нашлось (555)
ТО заменить (555, 3)
ИНАЧЕ заменить (333, 5)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
Дана строка, состоящая из 400 цифр 5. Сколько пятёрок было удалено за время обработки строки по этой программе?
Это пример задачи из ЕГЭ по информатике - задание № 12.
Как будем решать задачу?
Будем использовать метод replace(v,w, x) для замены подстроки v на w, параметр x указывает на количество замен, в нашем случае x = 1. Если параметр x не указывать, будут выполнены все возможные замены.
Чтобы вычислить количество удаленных '5' за время обработки строки, найдем ту команду, которая заменяет '5' на другие символы - это команда: заменить (555, 3), за счет этой команды удаляются три '5'. В этом месте алгоритма будем увеличивать счетчик удаленных пятерок на 3.
Программа решения задачи на языке Python
s = '5' * 400
k = 0
while '555' in s or '333' in s:
if '555' in s:
s = s.replace('555','3',1)
k+=3
else:
s = s.replace('333','5',1)
print('k =',k)
Вывод результата:
Комментариев нет:
Отправить комментарий