Задание №25 ЕГЭ Информатика с ответом и решением
Ответ: 1076020 10760200 107602000 1076020000 1576026930
Условие
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1?7602*0 и при этом без остатка делятся на 4891. В ответе запишите все найденные числа в порядке возрастания.
Подсказки — как подойти к решению
- Не перебирай все числа до предела: шагай сразу по числам, кратным делителю из условия. Верхнюю границу включай и следи, чтобы число соответствовало маске целиком, от первой цифры до последней.
- Символ «*» может задавать и пустую последовательность, поэтому подходящее число бывает короче, чем кажется. Для проверки маски удобно взять fnmatch или регулярное выражение, а не сверять цифры вручную.
Решение
Приведем решение на языке Python.
from fnmatch import *
for x in range (0, 10**10, 4891):
if fnmatch(str(x),'1?7602*0'):
print(x)
В результате работы программа должна вывести следующее:
1076020
10760200
107602000
1076020000
1576026930
Приведем решение Юрия Лысакова на языке Python.
s = '1?7602*0'
for i in range(0,10):
s1 = str(i)
for j in range(-1,1002):
s2 = str(j)
if j == -1:
s2 =''
if j > 999:
s2 = '0'*(j-998)
ss = s.replace('?',s1)
ss = ss.replace('*',s2)
if int(ss) % 4891 == 0:
print(int(ss))
Ответ: 1076020&10760200&107602000&1076020000&1576026930
Типичные ошибки
- Потеряно короткое число, где «*» пустая, и добавлено число из одиннадцати цифр, выходящее за предел. Проверяй длину каждого кандидата и помни про пустую звёздочку.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №25 по информатике