Информатика: ОГЭ и ЕГЭ

Тренировка ЕГЭ · задание 25 · маска числа

Задание 25 ЕГЭ: маска числа

Маска числа с символами «?» и «*» и делимость. Тема номера — делители и маски чисел. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.

Пример

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

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

Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 25*??3*8, делящиеся на 5208 без остатка.

В ответе запишите все найденные числа в порядке возрастания, справа от каждого числа — результат деления этого числа на 5208. Запишите каждую пару чисел с новой строки, числа — через пробел.

Ответ25003608 4801; 25133808 4826; 25472328 4891; 25498368 4896; 25993128 4991

Решение

В маске 6 обязательных символов (цифры и «?»), а числа, не превышающие 108, имеют не больше 8 цифр (само 108 маске не соответствует). Значит, обе «*» вместе могут означать от 0 до 2 цифр, и все числа по маске можно просто перебрать — их 32 100. Другой способ — перебирать кратные 5208 и сверять запись с маской через fnmatch; кратных 5208 до 108 около 19 201, так что и это быстро. Одно и то же число может получиться при разных разбиениях цифр между двумя «*», поэтому складываем найденные числа в множество.

from itertools import product

digits = "0123456789"
found = set()
for q in product(digits, repeat=2):          # цифры на местах «?»
    for k1 in range(3):
        for k2 in range(3 - k1):        # обе «*» вместе — не больше 2 цифр
            for mid1 in product(digits, repeat=k1):
                for mid2 in product(digits, repeat=k2):
                    s1, s2 = "".join(mid1), "".join(mid2)
                    n = int(f"25{s1}{q[0]}{q[1]}3{s2}8")
                    if n <= 10**8 and n % 5208 == 0:
                        found.add(n)
for n in sorted(found):
    print(n, n // 5208)

Ответ:
25003608 4801
25133808 4826
25472328 4891
25498368 4896
25993128 4991

Решить такую задачу — новый вариант с проверкой

Задание 25 ЕГЭ: другие виды

Все задачи задания 25 вперемешку · разбор: как решать задание 25 · пробные варианты ЕГЭ