№25

Примеры решений прототипа №2

Маски и делители

ПРИМЕРЫ РЕШЕНИЙ

№ 4204 Открытый вариант 2022 (Уровень: Базовый)

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

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

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

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

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

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

from fnmatch import *

for n in range(123450708//23*23, 10**9, 23):
    if fnmatch(str(n), '12345?7?8'): print(n, n // 23)

№ 11672 (Уровень: Базовый)

(Л. Шастин) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 12*34?5, делящиеся на 21025 без остатка и состоящие из одинакового количества чётных и нечётных цифр.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 21025.
Количество строк в таблице для ответа избыточно.

from fnmatch import *

for n in range(21025, 10**10, 21025):
    evens = len([x for x in str(n) if x in '02468'])
    odd = len([x for x in str(n) if x not in '02468'])
    if fnmatch(str(n), '12*34?5') and evens == odd:
        print(n, n // 21025)

 

№ 18298 (Уровень: Базовый)

(Д. Бахтиев) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «#» означает любую последовательность чётных цифр произвольной длины; в том числе «#» может задавать и пустую последовательность.
Например, маске 123#4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1592#6?8 и делящиеся на 1996 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им
результаты деления этих чисел на 1996.
Количество строк в таблице для ответа избыточно.

from fnmatch import *

for n in range(1996, 10**10, 1996):
    if str(n)[:4] == '1592' and fnmatch(str(n)[-3:], '6?8'):
        if len(str(n)) > 7 and all(x in '02468' for x in str(n)[4:-3]):
            print(n, n // 1996)

← К списку шпаргалок