fnmatch
Маска - это шаблон задающий правила выбора подходящих строк. Правила по которым задаются маски следующие
|
Маска |
Описание |
|---|---|
|
|
Любое количество любых символов |
|
|
Ровно один любой символ |
|
|
Любой символ из списка |
|
|
Любой символ кроме символов из списка |
В 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)