Задания
Версия для печати и копирования в MS Word

Назовём мас­кой числа по­сле­до­ва­тель­ность цифр, в ко­то­рой также могут встре­чать­ся сле­ду­ю­щие сим­во­лы:

—  сим­вол «?» озна­ча­ет ровно одну про­из­воль­ную цифру;

—  сим­вол «*» озна­ча­ет любую по­сле­до­ва­тель­ность цифр про­из­воль­ной длины; в том числе «*» может за­да­вать и пу­стую по­сле­до­ва­тель­ность.

На­при­мер, маске 123*4?5 со­от­вет­ству­ют числа 123405 и 12300405.

Среди на­ту­раль­ных чисел, не пре­вы­ша­ю­щих 1010, най­ди­те все числа, со­от­вет­ству­ю­щие маске 3?12?14*5, де­ля­щи­е­ся на 1917 без остат­ка. В от­ве­те за­пи­ши­те в пер­вом столб­це таб­ли­цы все най­ден­ные числа в по­ряд­ке воз­рас­та­ния, а во вто­ром столб­це  — со­от­вет­ству­ю­щие им ре­зуль­та­ты де­ле­ния этих чисел на 1917.

Ко­ли­че­ство строк в таб­ли­це для от­ве­та из­бы­точ­но.

Ответ:

Спрятать решение

Ре­ше­ние.

Будем по­сле­до­ва­тель­но рас­смат­ри­вать каж­дое целое число, крат­ное 1917, затем каж­дое число про­ве­рять на со­от­вет­ствие маске.

 

При­ведём ре­ше­ние на языке Python.

from fnmatch import *

for x in range(0, 10**10, 1917):

# Пе­ре­би­ра­ем все числа от 0 с шагом 1917, будут по­лу­че­ны числа крат­ные 1917

if fnmatch(str(x), '3?12?14*5'):

# Про­ве­ря­ем по­лу­чен­ное число со­от­вет­ствию за­да­нию

print(x, x//1917)

 

В ре­зуль­та­те ра­бо­ты про­грам­ма долж­на вы­ве­сти сле­ду­ю­щее:

351261495 183235

3212614035 1675855

3412614645 1780185

3712414275 1936575

3912414885 2040905

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

from itertools import product

d='0123456789'

twod=[''.join(x) for dl in range(3) for x in product(d,repeat=dl)]

a=sorted([int(f'3{x}12{y}14{z}5') for x in d for y in d for z in twod])

for y in [x for x in a if x%1917==0]: print(y,y//1917)

Источники: