πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №25 → Задание i25-05

Задание №25 ЕГЭ Информатика с ответом и решением

Ответ: 1072461 1272460371 1772469231

Условие

Маска числа — это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр.

Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415.

Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1?7246*1 и при этом без остатка делятся на 4173.

В ответе запишите все найденные числа в порядке возрастания.

Подсказки — как подойти к решению

  1. Не перебирай все натуральные числа: удобнее идти по числам, кратным делителю, с шагом, равным делителю, и для каждого проверять соответствие маске.
  2. Символ «?» — ровно одна цифра, «*» — любая последовательность цифр, в том числе пустая. Звёздочка стоит перед последней цифрой, поэтому у кандидатов может быть разное число разрядов.
  3. Проверяй маску целиком: и цифры перед звёздочкой, и последняя цифра должны стоять на своих местах. Найденные числа расположи по возрастанию.

Решение

Приведём решение на языке 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 по информатике