fnmatch

Маска - это шаблон задающий правила выбора подходящих строк. Правила по которым задаются маски следующие

Маска

Описание

*

Любое количество любых символов

?

Ровно один любой символ

[seq]

Любой символ из списка

[!seq]

Любой символ кроме символов из списка

Так, например, маске 1253? соответствуют числа от 12530 до 12539.
В python существует библиотека fnmatch с помощью которой можно проверять соответствует ли некоторая строка заданному шаблону. Внутри этой библиотеки присутствутет функция fnmatch(name, pattern), где name - проверяемая строка, где pattern - шаблон соответствие которому проверяется.
Непосредственно в ЕГЭ мы используем fnmatch в первую очередь для решения определенного типа 25ых задач, давайте решим одну из них.

Крылов 2024 Вар5

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

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

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

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

Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 11*223, делящиеся на число 149 без остатка.

В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце соответствующие им результаты деления этих чисел на 149.

Количество строк в таблице для ответа избыточно.

Решение

Идея в переборе всех натуральных чисел и проверке на то, кратно ли текущее число 149 и соответствует ли оно маске. Если оба этих условия выполнены, то печатаем само число и результат его деления на 149 на экран. Список выведенных чисел будет являться ответом.

from fnmatch import *
for n in range(1,10**8+1):
    if(n%149==0)and(fnmatch(str(n),"11*223")):
        print(n,n//149)

Последнее изменение: Понедельник, 12 августа 2024, 12:08