Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске \(123*4?5\) соответствуют числа \(123405\) и \(12300405\).
Среди натуральных чисел, не превышающих \(10^{8}\), найдите все числа, соответствующие маске \(32*823\), делящиеся на \(123\) без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на \(123\). Количество строк в таблице для ответа избыточно.
Решение:
Python
Решение с использованием библиотеки fnmatch
from fnmatch import fnmatch
n = 32823 + 123 - 32823 % 123
for x in range(n, 10**8, 123):
if fnmatch(str(x), '32*823'):
print(x, x // 123)
Непосредственный перебор
for n in range(4):
for i in range(10**n):
x = 32 * 10**(3+n) + i * 10**3 + 823
if x % 123 == 0:
print(x, x//123)
Ответ:
\(32090823\) \(260901\)
\(32213823\) \(261901\)
\(32336823\) \(262901\)
\(32459823\) \(263901\)
\(32582823\) \(264901\)
\(32705823\) \(265901\)
\(32828823\) \(266901\)
\(32951823\) \(267901\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене