Задача к ЕГЭ по информатике на тему «исполнитель «редактор» – строка с произвольным порядком цифр» №4

Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.

1. заменить (v, w)

2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».

Дана программа для исполнителя Панцирь:

НАЧАЛО

ПОКА нашлось (*1) ИЛИ нашлось (*5) ИЛИ нашлось (*3)

ЕСЛИ нашлось (*1)

ТО заменить (*1, *353)

ИНАЧЕ ЕСЛИ нашлось (*5)

ТО заменить (*5, *)

ИНАЧЕ ЕСЛИ нашлось (*3)

ТО заменить (*3, 4*)

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

На вход приведённой программе поступает строка, начинающаяся с символа “*”, а затем содержащая 92 цифр 1, 71 цифр 5 и 87 цифры 3, расположенных в произвольном порядке. Определите сумму числовых значений цифр строки, получившейся в результате выполнения программы. Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 2, то верным ответом было бы число 100.

Решение руками

Принцип действия данной программы можно воспринимать как фильтр, через который по очереди пропускаются одни числа, а выводятся другие (или не выводятся вообще). Этим фильтром служит знак “*”. При пропускании через фильтр цифры 5, она не выводится, т.е. каждая пятерка изначальной строки удаляется, после чего в конечной строке не будет ни одной пятерки.

Если проанализировать сам алгоритм программы, то можно понять, что каждая единица преобразуется в две четверки, каждая тройка — в одну четверку. В результате конечная строка будет состоять лишь из одних четверок.

Исходя из этого, программа преобразует 92 единицы в 184 четверки, 87 троек в 87 четверок, все пятерки будут удалены. Всего четверок 271, их сумма равна 4 ⋅ 271 = 1084.

Решение программой

s = ’*’ + ’1’ * 92 + ’5’ * 71 + ’3’ * 87

while ’*1’ in s or ’*5’ in s or ’*3’ in s:
    if ’*1’ in s:
        s = s.replace(’*1’, ’*353’, 1)
    elif ’*5’ in s:
        s = s.replace(’*5’, ’*’, 1)
    elif ’*3’ in s:
        s = s.replace(’*3’, ’4*’, 1)

s = s.replace(’*’, ’’)

print(sum(int(c) for c in s))



Ответ: 1084
Оцените статью
Я решу все!