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

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

Ответ: 30117857 15127 31113357 15627 32108857 16127 33104357 16627

Условие

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:

— символ «?» означает ровно одну произвольную цифру;

— символ «*» означает любую последовательность цифр произвольной длины; в том числе «∗» может задавать и пустую последовательность.

Например, маске 123*4?5 соответствуют числа 123405 и 12300405.

Найдите все натуральные числа, не превосходящие 108, для которых выполнены все условия:

— соответствуют маске 3?1*57;

— делятся на 1991 без остатка.

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

возрастания, справа от каждого числа их частное от деления на 1991.

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

  1. Перебирай не все числа подряд, а только кратные делителю из условия: кандидатов станет в тысячи раз меньше. Для каждого кандидата проверяй соответствие маске целиком.
  2. В ответе две колонки: само число и частное от деления на делитель. Числа выписывай в порядке возрастания, а частное каждый раз вычисляй делением, а не переноси из соседней строки.

Решение

Будем последовательно рассматривать каждое целое число, кратное 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 по информатике