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

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

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

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

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

Среди натуральных чисел, не превышающих 109  , найдите все числа, соответствующие маске 12345?7?8  , делящиеся на число 21  без остатка.

В ответе запишите все найденные числа в порядке возрастания и соответствующее им частное от деления на 21  .

Решение через циклы

for i in range(123450708,123460000):
    if (i%21==0) and (i%10==8) and ((i//100)%10==7): # проверяем, что число удовлетворяет маске
        print(i, i//21)

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

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

Ответ: 123450768 5878608 123453708 5878748 123454758 5878798 123458748 5878988 123459798 5879038
Оцените статью
Я решу все!