Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 12??36*1, делящиеся
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел
Количество строк в таблице для ответа избыточно.
Ответ:
Будем последовательно рассматривать каждое целое число,
Приведём решение на языке Python.
from fnmatch import *
for x in range(0, 10**8, 273): # Перебераем все числа от 0 с шагом 273, будут полученны числа кратные 273
if fnmatch(str(x), '12??36*1'):# Проверяем полученное число соответствию заданию
print(x, x // 273)
В результате работы программа должна вывести следующее:
1271361 4657
12633621 46277
12663651 46387
12693681 46497
Приведём решение Евгения Джобса.
Заметим, что при ограничении
for a in range(10):
for b in range(10):
x = 12*10**5 + a*10**4 + b*10**3 + 361
# можно заменить на
# x = int(f'12{a}{b}361')
if x % 273 == 0:
print(x, x // 273)
for a in range(10):
for b in range(10):
for c in range(10):
x = 12*10**6 + a*10**5 + b*10**4\
+ 36*100 + c*10 + 1
# можно заменить на
# x = int(f'12{a}{b}36{c}1')
if x % 273 == 0:
print(x, x // 273)
Приведём решение Юрия Красильникова на языке Python.
d = '0123456789'
nums = sorted([int(f'12{x}{y}36{s}1') for x in d for y in d for s in ['']+list(d)])
for x in nums:
if x % 273 == 0:
print(x,x//273)
Приведём решение Ильи Крылова на языке Python.
w = ['']+[i for i in '0123456789']
numbers = []
for x in '0123456789':
for y in '0123456789':
for z in w:
number = int('12'+x+y+'36'+z+'1')
numbers.append(number)
numbers = sorted(numbers)
for number in numbers:
if number % 273 == 0:
print(number, number // 273)
Приведём решение Артёма Гридина на языке Python.
for i in range(0, 10**8, 273):
s = str(i)
if s[0:2] == '12' and s[4:6] == '36' and s[-1] == '1':
print(s, i//273)

