Условие КЕГЭ: Тип 25 № 5140 /dev/inf 11.22 (Уровень: Базовый)
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?»
означает ровно одну произвольную цифру;
– символ «*»
означает любую последовательность цифр произвольной длины;
в том числе «*»
может задавать и пустую последовательность.
Например, маске 123*4?5
соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 10**10
, найдите все числа, соответствующие маске
32?056*6
, делящиеся на 2023 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 2023.
Комментарии к коду программы для решения задачи:
import itertools
Импортируем модуль itertools, который содержит функции для создания итераторов.M = []
Создаем пустой список под названием M
, он будет использоваться для хранения всех возможных комбинаций чисел от 0 до 9 (десятичная система счисления), которые мы называем масками исходя из условия задачи ,for l in range(0, 3+1):
В цикле for
перебираем значения от 0 до 3. Эти значения будут использоваться в качестве длины маски «*»
.for s in itertools.product('0123456789', repeat=l):
Вложенный цикл for
использует функцию itertools.product()
для создания кортежей всех возможных комбинаций из чисел от 0 до 9, длиной, равной текущему значению l
.s = ''.join(s)
Мы преобразуем каждый кортеж s
, сформированный во вложенном цикле, в строку, используя метод join()
.M.append(s)
И добавляем эту строку в список M
для хранений всех таких масок.R = []
Создаем пустой список под названием R
. R будет использоваться для хранения пар значений удовлетворяющих условию задачи.