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

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

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

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

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

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

НАЧАЛО

ПОКА нашлось(33)  ИЛИ нашлось(2)

ПОКА нашлось(32)

ТО заменить(32,33)

КОНЕЦ ПОКА

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

ТО заменить(33,2)

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

ТО заменить(2,7)

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Найдите произведение количества тех цифр, которых больше всего, и значения тех цифр, которых меньше всего в строке, полученной в результате применения приведённой выше программы к строке: 3◟3..◝.◜33◞ 2◟2..◝.◜22◞.   120      25  Так, если программа вывела бы 60 пятерок и 10 четверок, то ответом было число 60 ⋅ 4 = 240.

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

Для удобства будем использвовать следующие обозначения для количества одинаковых цифр, идущих подряд: A   ,  (B)  где A — цифра, которая находится в строке, а B — количество этих цифр.

Изначально была строка 3(120)2(25).  Цикл ПОКА внутри основного цикла ПОКА будет работать до момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять из 145 троек.

Далее все кроме последней тройки исчезнут, а на их месте появятся двойки.

3(145) → 2(72)3(1)

После этого все двойки заменятся семерками и программа завершит свою работу. В полученной строке 72 семерки и 1 тройка. Больше всего семерок, меньше – троек, ответ 72 ⋅ 3 = 216.

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

s = ’3’ * 120 + ’2’ * 25

while ’33’ in s or ’2’ in s:
    while ’32’ in s:
        s = s.replace(’32’, ’33’, 1)
    if ’33’ in s:
        s = s.replace(’33’, ’2’, 1)
    elif ’2’ in s:
        s = s.replace(’2’, ’7’, 1)

count = {}
for digit in s:
    if digit in count:
        count[digit] += 1
    else:
        count[digit] = 1

max_count = -1
min_count = float(’inf’)
max_digit = ’’
min_digit = ’’

for digit, cnt in count.items():
    if cnt > max_count:
        max_count = cnt
        max_digit = digit
    if cnt < min_count:
        min_count = cnt
        min_digit = digit

result = max_count * int(min_digit)
print(result)


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