Какое наименьшее количество двоек могло быть в строке A?
Условие
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.А) заменить (v, w).Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150.Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.Б) нашлось (v).Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется. Дана программа для Редактора:НАЧАЛО ПОКА НЕ нашлось (00) заменить (02, 101) заменить (11, 2) заменить (012, 30) заменить (010, 00) КОНЕЦ ПОКАКОНЕЦ Известно, что исходная строка A содержала ровно два нуля — на первом и на последнем месте, 40 единиц, больше 40 двоек и не содержала других цифр.
После выполнения данной программы получилась строка B, сумма цифр которой оказалась простым числом. Какое наименьшее количество двоек могло быть в строке A?
Ответ
Ответ и полный разбор откроются после входа
Посмотреть ответРешение по шагам
Как рассуждать
Решение. Приведем решение на языке Python. def Div(n): for i in range(2, int(n ** 0.
-
- 1): if n % i == 0: return 0 return n > 1 def fn(u): A = '0' + u + '0' while '00' not in A: A = A.replace('02','101',1).replace('11','2',1).replace('012','30',1).replace('010','00',1) return 1 if Div(sum(map(int, list(A)))) else 0 print(min([i for i in range(41,100) if fn('1' * 40 + '2' * i)]))
-
Осталось ещё 5 шагов
Приведем решение Сергея Калугина на языке…
s = s.replace('11', '2'…
s = s.replace('012', '30'…
s = s.replace('010', '00'…
summa = sum([int(x) for x in s]) if…
Бесплатно · займёт минуту