N.I.K.I.T.O.S
Знаток
(269)
3 недели назад
Для решения задачи нам нужно выполнить шаги, описанные в программе исполнителя "Редактор", и найти наименьшее простое значение n, такое что сумма чисел в конечной строке кратна n.
Давайте разберем программу шаг за шагом.
Шаги выполнения программы
1. Начальная строка:
s = '>' + 21 * '0' + n * '1' + 11 * '2'
Эта строка состоит из одного символа '>', 21 нуля, n единиц и 11 двоек.
2. Цикл выполнения:
Цикл будет работать, пока есть подстроки '>1', '>2' или '>0'.
- Замена '>1' на '22>':
Все первые вхождения '>1' будут заменяться на '22>'.
- Замена '>2' на '2>':
Первые вхождения '>2' будут заменяться на '2>'.
- Замена '>0' на '1>':
Первые вхождения '>0' будут заменяться на '1>'.
3. Обновление суммы:
В конце цикла мы подсчитываем сумму значений символов строке после всех замен:
v = s.count('1') + s.count('2') * 11
4. Определение кратности:
Нужно найти наименьшее простое число n, при котором сумма кратна n.
Решение задачи:
Программу можно реализовать в Python, чтобы найти нужное значение. Вот код для этого:
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
for n in range(100):
s = '>' + 21 * '0' + n * '1' + 11 * '2'
while '>1' in s or '>2' in s or '>0' in s:
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>', 1)
if '>0' in s:
s = s.replace('>0', '1>', 1)
total = s.count('1') + s.count('2') * 11
if is_prime(n) and total % n == 0:
print(n)
break
Алгоритм:
1. Проверяем каждое значение n от 0 до 99.
2. Выполняем алгоритм замены по условиям.
3. Считаем итоговую сумму.
4. Проверяем, является ли n простым, и делится ли сумма на n.
5. Если оба условия выполнены, выводим n и завершаем выполнение.
Запустив данный код, вы получите наименьшее простое значение n, при котором сумма чисел кратна n.
(А. Богданов) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>0)
ТО заменить (>0, 1>)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая 21 цифру «0», n цифр «1» и 11 цифр «2», расположенных в произвольном порядке.
Определите наименьшее простое значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы кратна n.
for n in range(100):
s = '>' + 21 * '0' + n * '1' + 11 * '2'
while '>1' in s or '>2' in s or '>0' in s:
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>', 1)
if '>0' in s:
s = s.replace('>0', '1>', 1)
v = s.count('1') + s.count('2') * 11
c = 0
for i in range(1, v + 1):