Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 1010, найдите все числа, соответствующие маске 1?2139*4, делящиеся
Количество строк в таблице для ответа избыточно.
Ответ:
Переберём все числа от 2023 до 1010, с шагом в 2023. Таким образом, каждое рассматриваемое число будет
Приведём решение на языке Python.
for i in range(2023,10**10, 2023):
if (i%10==4) and (str(i)[2:6] == '2139') and (str(i)[0] == '1'):
print(i, i//2023)
В результате работы программа должна вывести следующее:
162139404 80148
1321399324 653188
1421396214 702618
1521393104 752048
Приведём решение Вагнерова Ивана на языке Python.
from fnmatch import *
for x in range(0,10**10,2023):
if fnmatch(str(x), '1?2139*4'):
print(x, x//2023)
Приведём решение Ильи Крылова на языке Python.
kys = ['']+[str(i) for i in range(999+1)]
numbers = []
for x in '0123456789':
for y in kys:
number = int('1' + x + '2139' + y + '4')
numbers.append(number)
numbers = sorted(numbers)
for number in numbers:
if number % 2023 == 0:
print(number, number//2023)
Приведём решение Юрия Лысакова на языке Python.
s = '1?2139*4'
a = []
for i in range(10):
j = -1
while True:
j += 1
i1, j1 = str(i), str(j)
s1 = s.replace('?',i1)
s1 = s1.replace('*',j1)
k = int(s1)
if k > 10**10:
break # натуральные числа не превышают 10^10
if k % 2023 == 0:
a.append([k,k//2023])
a.sort(key=lambda x:x[0])
[print(*a[i]) for i in range(len(a))]

