Добрый день!
Задание 12 стало одним из простейших, когда разрешили пользоваться Python для решения любых задач, а не только последних, как раньше.
Дело в том, что нужная вам программа уже написана в тексте задания алгоритмическим языком, остается только "перевести" ее на язык Python. А сделать это очень легко, имея минимальные навыки и примеры ниже "в голове".
Пример 1
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение "истина", в противном случае возвращает значение "ложь". Строка исполнителя при этом не изменяется.
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (888)
ЕСЛИ нашлось (222)
ТО заменить (222, 8)
ИНАЧЕ заменить (888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
А решение будет таким:
Ответ: 28
Пример 2 (посложнее)
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение "истина", в противном случае возвращает значение "ложь". Строка исполнителя при этом не изменяется.
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>0)
ТО заменить (>0, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа ">", а затем содержащая 39 цифр "0", n цифр "1" и 39 цифр "2", расположенных в произвольном порядке.
Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.
Посмотрим, что выведет эта программа для n=1 (мы задали n=1 сами):
Мы не получили сумму в конце, значит, при n=1 сумма не является простым числом. Теперь мы можем подставлять значения n=2,3,4,5,6 и т.д., но если n большое число, перебирать придется долго. И текст программы выглядит громоздко с комментариями, давайте уберем их и вложим текст программы в цикл перебора n (заодно уберем вывод строк и будем сразу выводить пару n и sum):
Выглядит легче, не правда ли? А еще мы получили ответ - программа выдает все значения n, при которых сумма цифр результирующей строки является простым числом. Нам нужно минимальное n (по условию задачи), значит ответ - 5 (n мы перебираем от 1 до 99, этот диапазон можно расширить, мы выбираем его по своему желанию). Поскольку мы двигаемся от минимального n, то самое первое число, которое даст нам простую сумму, будет наименьшим.
Ответ: 5
Более простые задачи этой темы можно решать и без программирования, но в случае примера 2 я очень сомневаюсь, что кому-то удастся безошибочно найти решение без программы. Могу привести решение в Excel, но сразу могу сказать, что времени оно займет больше.
Всего доброго!