Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).
Среди натуральных чисел, не превышающих \(10^{9}\), найдите все числа, соответствующие маске \(33*21?7\), делящиеся на \(2079\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(2079\). Количество строк в таблице для ответа избыточно.
Решение:
Python
Решение с использованием библиотеки fnmatch
from fnmatch import fnmatch
n = 332107 + 2079 - 332107 % 2079
for x in range(n, 10**9, 2079):
if fnmatch(str(x), '33*21?7'):
print(x, x // 2079)
Непосредственный перебор
for n in range(4):
for i in range(10**n):
for k in range(10):
x = 33*10**(4+n) + i*10**4 + 21*100 + k*10 + 7
if x % 2079 == 0:
print(x, x//2079)
Ответ:
\(336222117\) \(161723\)
\(337012137\) \(162103\)
\(337802157\) \(162483\)
\(338592177\) \(162863\)
\(339382197\) \(163243\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене