Задание №25 ЕГЭ Информатика с ответом и решением
Ответ: 30117857 15127 31113357 15627 32108857 16127 33104357 16627
Условие
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «∗» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Найдите все натуральные числа, не превосходящие 108, для которых выполнены все условия:
— соответствуют маске 3?1*57;
— делятся на 1991 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, справа от каждого числа их частное от деления на 1991.
Подсказки — как подойти к решению
- Перебирай не все числа подряд, а только кратные делителю из условия: кандидатов станет в тысячи раз меньше. Для каждого кандидата проверяй соответствие маске целиком.
- В ответе две колонки: само число и частное от деления на делитель. Числа выписывай в порядке возрастания, а частное каждый раз вычисляй делением, а не переноси из соседней строки.
Решение
Будем последовательно рассматривать каждое целое число, кратное 1991, затем каждое число проверять на соответствие маске.
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**8, 1991):
# Перебираем все числа от 0 с шагом 1991, будут получены числа кратные 1991
if fnmatch(str(x), '3?1*57'):
# Проверяем полученное число соответствию заданию
print(x, x // 1991)
В результате работы программа должна вывести следующее:
30117857 15127
31113357 15627
32108857 16127
33104357 16627
Приведём другое решение на языке Python.
x, y, ans = 0, '', []
num = int('3' + str(x) + '1' + y + '57')
for x in range(0, 10):
for y in range(1, 10000):
num = int('3' + str(x) + '1' + str(y)[1::] + '57')
if num % 1991 == 0 and num not in ans:
ans.append(num)
ans.sort()
for i in ans:
print(i, i // 1991)
Типичные ошибки
- Частное в последней строке искажено: цифры переставлены местами. Проверяй деление обратным умножением на делитель, а не копируй шаблон соседней строки.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №25 по информатике