ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Редактор и машина Тьюринга.
Учебные темы: Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат; Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.
| КЭС: | 3.3 Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат |
| Тип ответа: | Краткий ответ |
Ответ: 78
Решение.
Начальное слово состоит из цифры 5 и n цифр 2. Начинаем с n = 4, поскольку n — целое и строго больше 3.
На каждом проходе условия ЕСЛИ проверяются по текущей строке сверху вниз. Следующая проверка учитывает изменения предыдущей команды. В конструкции с ИНАЧЕ выполняется только одна ветвь. Каждая замена затрагивает только первое слева вхождение.
Для доказательства остановки присвоим цифрам положительные веса: 1 → 1, 2 → 1, 5 → 2. Вес строки — сумма весов её символов.
Замена 52 → 11 уменьшает этот вес на 1.
Замена 2222 → 5 уменьшает этот вес на 2.
Замена 1122 → 25 уменьшает этот вес на 1.
На каждом проходе выполняется хотя бы одна замена; неотрицательный целый вес строго убывает. Поэтому цикл обязательно завершится.
Для доказательства минимальности достаточно последовательно проверить n от 4 до 78 включительно и остановиться на первом подходящем результате. Воспроизводимый расчёт на Python:
for n in range(4, 79):
s = '5' + '2' * n
while (
'52' in s
or '1122' in s
or '2222' in s
):
if '52' in s:
s = s.replace('52', '11', 1)
if '2222' in s:
s = s.replace('2222', '5', 1)
if '1122' in s:
s = s.replace('1122', '25', 1)
if sum(map(int, s)) == 37:
print(n)
breakПроверены все целые значения от 4 до 78, всего 75, без пропусков.
При меньших допустимых n получаются только следующие суммы: 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35. Значения 37 среди них нет.
Контрольные результаты около первого подходящего значения:
n = 75: «1» × 30 + «5»; сумма 35.
n = 76: «1» × 32; сумма 32.
n = 77: «1» × 32 + «2»; сумма 34.
n = 78: «1» × 30 + «2» + «5»; сумма 37.
Проверка случая n = 78 по выполненным заменам:
52→11: число замен — 16.
2222→5: число замен — 15.
1122→25: число замен — 1.
По окончании цикла (число проходов — 16) получаем «1» × 30 + «2» + «5». Ни одна из цепочек 52, 1122, 2222 больше не встречается.
Сумма цифр этого слова: 1 · 30 + 2 · 1 + 5 · 1 = 37.
Подходящее значение существует, а все меньшие допустимые значения исключены. Поэтому наименьшее n = 78.
Ответ: 78.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF5F9BD1.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.