Задача к ЕГЭ по информатике на тему «Маски» №4

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

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

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

Среди натуральных чисел, не превышающих 106  , найдите все числа, соответствующие маске 56??3*9 и делящиеся на 49 без остатка. В ответе попарно запишите все найденные числа в порядке возрастания, и через пробел — соответствующие им частные от деления на 49. Каждую пару так же отделите друг от друга пробелом.

Решение через fnmatch

# Импортируем модуль fnmatch для нужной функции
from fnmatch import *
# для оптимизации делаем цикл с шагом 49, начиная с числа кратного 49, для того чтобы проходиться по числам кратным 49
for i in range(560070,10**6 + 1,49):
    # fnmatch — функция, сравнивающая строку с указанной маской
    # Возвращает True, если строка подходит к маске
    if fnmatch(str(i), ’56??3*9’):
        print(i, i//49)

Решение через срезы

# для оптимизации делаем цикл с шагом 49, начиная с числа кратного 49, для того чтобы проходиться по числам кратным 49
for x in range(560070,10**6+1,49):
    n = str(x)
    if ’56’ in n[:2] and n[-1] == ’9’ and n[4] == ’3’: # проверка, что число удовлетворяет маске
        print(x,x//49)

Ответ: 564039 11511 568939 11611
Оцените статью
Я решу все!