
Задача по теме: "Редактор"
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды
заменить (v, w)
не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение "истина", в противном случае возвращает значение "ложь". Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно).
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
На вход приведённой программы поступает строка, начинающаяся с символа “>”, а затем содержащая 15 цифр 0, n цифр 1 и 15 цифр 2, расположенных в произвольном порядке.
Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом.
Дана программа для Редактора:
НАЧАЛО
ПОКА нашлось (>0) ИЛИ нашлось (>1) ИЛИ нашлось (>2)
ЕСЛИ нашлось (>0)
ТО заменить (>0, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>1)
ТО заменить (>1, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ


Решение:
Решение 1 (Аналитически)
Обратим внимание что преобразования символов происходят независимо от порядка и положения цифр 0, 1 или 2. То есть строка “>201” после преобразования будет иметь такую же сумму цифр, как и строка “>021”. Отсюда следует, что порядок символом не имеет значения и в исходной строке 15 нулей преобразуются в 30 двоек, а 15 двоек преобразуются в 15 единиц (ВАЖНО: получившиеся после преобразования новые цифры не участвуют в дальнейшем преобразовании, т.к. они будут находиться перед символом “>”). В итоге сумма цифр строки составит 30*2 + 15*1 = 75. Ближайшее простое число - это 79. То есть в конечной строке не хватает двух двоек. Чтобы получить две двойки в конечной строке, в начальной должно быть две единицы. Кол-во единиц = n, получается n = 2.
Решение 2
Для определения простоты числа можно создать функцию, которая будет перебирать числа в диапазоне range(2, int(x**0.5)+1) и проверять являются ли они делителями x, где x - сумма всех цифр в конечной строке:
def simple(x):
for i in range(2, int(x**0.5)+1):
if x%i == 0:
return 0
return 1
for n in range(50)
a = '>' + '0'*15 + '1'*n + '2'*15
while '>0' in a or '>1' in a or '>2' in a:
if '>0' in a:
a = a.replace('>0', '22>', 1)
if '>1' in a:
a = a.replace('>1', '2>', 1)
if '>2' in a:
a = a.replace('>2', '1>', 1)
x = sum(int(i) for i in a[:-1])
if simple(x) == 1:
print(n)
break
Ответ: 2
Сообщение об ошибке
Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!

МГ | Pro | ProMax | |
Практика на платформе | |||
Отслеживание прогресса обучения | |||
Двухуровневое домашнее задание после каждого вебинара | |||
Все материалы составлены экспертом ЕГЭ | |||
Персональный менеджер | |||
Личный куратор | |||
Разбор ошибок личным куратором | |||
Еженедельные созвоны с куратором для закрытия индивидуальных пробелов | |||
Составление индивидуального расписания |

счёта
средств
подтверждено!
Теперь вы можете приступить
к следующему уроку
курса по математике
замены
Для смены номера телефона
мы отправили Вам код по СМС,
введите его в поле ниже.
Электронная почта
На почту придет чек об оплатеНажимая кнопку "купить", Вы выражаете своё согласие с офертой оказания услуг и принимаете их условия
Здравствуйте!
Выберите информацию о себе ниже

Оплата прошла успешно!
