Разбор 25.PNG

№ 7357 (Уровень: Средний)

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

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

– символ «» означает любое нечётное число; в том числе «» может задавать и пустую последовательность.

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

Среди натуральных чисел, не превышающих 10**10 , найдите 5 наибольших чисел, соответствующих маске ?136*, делящихся на 53191 без остатка.

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

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

Untitled

Комментарии к коду решения:

  1. from fnmatch import * - импорт всех функций из модуля fnmatch для работы с шаблонами и строками.
  2. R = [] - создание пустого списка R, куда будут добавляться результаты.
  3. Цикл for x in range(53191, 10**10, 53191): для перебора чисел от 53191 до 10^10 с шагом 53191;
  4. if fnmatch(str(x), '?136*'): - проверка, соответствует ли строковое представление числа x шаблону '?136*'.
  5. if str(x)[0] in '02468' and str(x)[-1] in '13579': - проверка, что первая цифра числа находится в диапазоне '02468', а последняя - в '13579'.
  6. R.append([x, x // 53191]) - добавление пары чисел [x, x // 53191] в список R.
  7. Цикл for i in range(-5, 0): для вывода последних пяти элементов списка R:
  8. print(*R[i]) - вывод списка элементов с индексами с -5 по -1.
from fnmatch import *
R = []
for x in range(53191, 10**10, 53191):
    if fnmatch(str(x), '?136*'):
        if str(x)[0] in '02468' and str(x)[-1] in '13579':
            R.append([x, x // 53191])

for i in range(-5, 0):
    print(*R[i])

Ответ:

Присоединяйтесь и готовьтесь с нами: t.me/informatika_kege_itpy