Задание №25 ЕГЭ Информатика с ответом и решением
Ответ: 1072461 1272460371 1772469231
Условие
Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.
Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415.
Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1?7246*1 и при этом без остатка делятся на 4173.
В ответе запишите все найденные числа в порядке возрастания.
Подсказки — как подойти к решению
- Не перебирай все натуральные числа: удобнее идти по числам, кратным делителю, с шагом, равным делителю, и для каждого проверять соответствие маске.
- Символ «?» — ровно одна цифра, «*» — любая последовательность цифр, в том числе пустая. Звёздочка стоит перед последней цифрой, поэтому у кандидатов может быть разное число разрядов.
- Проверяй маску целиком: и цифры перед звёздочкой, и последняя цифра должны стоять на своих местах. Найденные числа расположи по возрастанию.
Решение
Приведём решение на языке Python.
for x in range(10):
s = '1' + str(x) + '72461'
if int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(10):
s = '1' + str(x) + '724600' + str(y) + '1'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(100):
s = '1' + str(x) + '72460' + str(y) + '1'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
for x in range(10):
for y in range(1000):
s = '1' + str(x) + '7246' + str(y) + '1'
if int(s) < 10**10 and int(s) % 4173 == 0:
print(s)
В результате работы программа должна вывести следующее:
1072461
1272460371
1772469231
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**10, 4173):
# Перебираем все числа от 0 с шагом 4173, будут получены числа кратные 4173
if fnmatch(str(x), '1?7246*1'):
# Проверяем полученное число соответствию заданию
print(x)
Ответ: 1072461&1272460371&1772469231
Типичные ошибки
- Потеряно число с пустой звёздочкой: «*» допускает и нуль цифр, поэтому такое число тоже соответствует маске и должно быть в ответе.
- Перебор остановлен раньше верхней границы из условия. Убедись, что диапазон доходит до самого большого числа, которое допускают маска и ограничение по величине.
В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №25 по информатике