Тип 25 № 60267 

Обработка целочисленной информации. Маска числа
i
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1?2157*4, делящиеся на 2024 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 2024.
Количество строк в таблице для ответа избыточно.
Решение. Приведём решение на языке Python.
a = []
for x in range(10):
s = '1' + str(x) + '21574'
s = int(s)
if s < 10**10 and s % 2024 == 0:
a.append(s)
for x in range(10):
for y in range(10):
s = '1' + str(x) + '215700' + str(y) + '4'
s = int(s)
if s < 10**10 and s % 2024 == 0:
a.append(s)
for x in range(10):
for y in range(100):
s = '1' + str(x) + '21570' + str(y) + '4'
s = int(s)
if s < 10**10 and s % 2024 == 0:
a.append(s)
for x in range(10):
for y in range(1000):
s = '1' + str(x) + '2157' + str(y) + '4'
s = int(s)
if s < 10**10 and s % 2024 == 0:
a.append(s)
a.sort()
for i in range(len(a)):
print(a[i], a[i] // 2024)
В результате работы программа должна вывести следующее:
142157664 70236
1021575544 504731
1121571264 554136
1221577104 603546
1321572824 652951
1421578664 702361
1521574384 751766
1621570104 801171
1721575944 850581
1821571664 899986
1921577504 949396
Приведём решение Виктории Зиберовой на языке Python.
from fnmatch import fnmatch
for x in range(2024,10**10,2024):
if fnmatch(str(x),"1?2157*4"):
print(x,x//2024)
Приведём решение Юрия Красильникова на языке Python.
import re
for n in range(2024,10**10,2024):
if re.fullmatch('1[0-9]2157[0-9]*4',str(n)):
print(n,n//2024)
Примечание. Такое решение может быть легко модифицировано, если условия задачи изменятся. Например, если будет сказано, что знак вопроса означает не любую цифру, а только чётную, то будет достаточно заменить шаблон '1[0-9]2157[0-9]*4' на '1[02468]2157[0-9]*4'.
Приведём решение Юрия Красильникова на языке Python.
import itertools
star = [''.join(p) for d in range(4) for p in itertools.product('0123456789',repeat = d)]
nums = sorted([int(f'1{q}2157{s}4') for q in '0123456789' for s in star])
for n in nums:
if n % 2024 == 0:
print(n,n // 2024)
Приведём решение Алексея Терехова на языке Python.
for x in range ((1021574 // 2024 + 1) * 2024, 10**10, 2024):
if str(x)[0] == '1' and str(x)[2:6] == '2157' and str(x)[-1] == '4':
print(str(x) + ' ' + str(x //2024))
Ответ: 142157664&70236&1021575544&504731&1121571264&554136&1221577104&603546&1321572824&652951&1421578664&702361&1521574384&751766&1621570104&801171&1721575944&850581&1821571664&899986&1921577504&949396