№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 (Уровень: Базовый) (Л. Шастин) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: |
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)