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

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

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

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

Дана программа для исполнителя ПЕЛЬМЕНИ:

Н АЧА ЛО

   П ОК А нашлось(10) И ЛИ наш лось(11) ИЛИ нашлось(330)

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

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

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

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

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

         Т О заменить(330,100)

      К ОН ЕЦ ЕС ЛИ

   К ОН ЕЦ ПО КА

К ОНЕ Ц

Найдите сумму нечетных цифр строки, полученной в результате применения приведённой выше программы к строке

33 ...3311 ...1100 ...00. ◟--◝10◜0-◞◟--◝5◜5-◞◟-1◝0◜00-◞

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

Начнем работу нашего алгоритма. Так как в исходной строке мы нашли 10  , то заменим 10  на 1  .

Получим строку 3 ...3 1...1 0...0 ◟-◝10◜0 ◞ ◟ ◝5◜5 ◞ ◟ ◝9◜99-◞

На данной итерации цикла строка больше меняться не будет, идем дальше. Вновь встречаем 10  , можем заметить, что если встречается 10  , то количество 0  уменьшается на один, а количество 1  остается неизменным, тогда можем выполнить это дейстие еще 999 раз, пока у нас не закончатся 0  .

Получим строку 3◟-.◝..◜3 ◞ 1◟. ◝..◜1 ◞   100   55

Так как у нас уже нет комбинаций 10  , проверяем следующие условия: находим комбинацию 11  , заменим 11  на      3  . Заметим, что после выполнения данного действия количество 1  уменьшается на два, а количество 3  увеличивается на единицу, при этом все новообразованные 3  располагаются после 1  . Повторим замену 11  на 3  еще 53∕∕2 = 26  раз, получим строку:

3◟-.◝..◜3 ◞ 1   127

Проверим. нет ли в строке комбинации 330  — нет, значит, завершаем работу алгоритма.

Запишем в ответ сумму нечетных цифр полученной после работы алгоритма строки: 3⋅127 + 1 = 382  . Запишем в ответ данное значение.

Решение прогой:

s = "3" * 100 + "1" * 55 + "0" * 1000
while "10" in s or "11" in s or "330" in s:
    if "10" in s:
        s = s.replace("10", "1", 1)
    elif "11" in s:
        s = s.replace("11", "3", 1)
    elif "330" in s:
        s = s.replace("330", "100", 1)
print(sum([int(i) for i in list(s) if int(i) % 2 != 0]))

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