Задание 12. Информатика. ЕГЭ. Шастин. 18.10.2024

Просмотры: 197
Изменено: 24 ноября 2024

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

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

Эта команда заменяет в строке первое слева вхождение цепочки \(v\) на цепочку \(w\).

Б) нашлось (v)

Эта команда проверяет, встречается ли цепочка \(v\) в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не меняется.

Дана программа для Редактора:

НАЧАЛО
  ПОКА нашлось (>3) ИЛИ нашлось(>2) ИЛИ нашлось(>0)
    ЕСЛИ нашлось (>3)
      ТО заменить (>3, 22>)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (>2)
      ТО заменить (>2, 2>)
    КОНЕЦ ЕСЛИ
    ЕСЛИ нашлось (>0)
      ТО заменить (>0, 3>)
    КОНЕЦ ЕСЛИ
  КОНЕЦ ПОКА
КОНЕЦ

На вход приведённой выше программе поступает строка, начинающаяся с символа «\(>\)», а затем содержащая \(17\) цифр «\(0\)», \(n\) цифр «\(3\)» и \(17\) цифр «\(2\)», расположенных в произвольном порядке.

Определите наименьшее возможно значение \(n\), при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является квадратом какого-либо натурального числа.

Решение:

Python


def sum_digs(s):
    return sum(int(x) for x in s if x != '>')

n = 1
while True:
    s = '>' + '0' * 17 + '2' * 17 + '3' * n 
    while '>3' in s or '>2' in s or '>0' in s:
        if '>3' in s:
            s = s.replace('>3', '22>', 1)
        if '>2' in s:
            s = s.replace('>2', '2>', 1)
        if '>0' in s:
            s = s.replace('>0', '3>', 1)
    x = sum_digs(s)
    if (int(x**0.5))**2 == x:
        print(n)
        break
    n += 1

Ответ: \(9\)