Задания
Версия для печати и копирования в MS Word
Тип 25 № 59773
i

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

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

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

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

Най­ди­те все на­ту­раль­ные числа, не пре­вос­хо­дя­щие 108, для ко­то­рых вы­пол­не­ны все усло­вия:

—  со­от­вет­ству­ют маске 3?1*57;

—  де­лят­ся на 1991 без остат­ка.

В от­ве­те за­пи­ши­те в пер­вом столб­це таб­ли­цы все най­ден­ные числа в по­ряд­ке

воз­рас­та­ния, спра­ва от каж­до­го числа их част­ное от де­ле­ния на 1991.

 

Ответ:

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

Ре­ше­ние.

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

 

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

from fnmatch import *

for x in range(0, 10**8, 1991):

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

if fnmatch(str(x), '3?1*57'):

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

print(x, x // 1991)

 

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

30117857 15127

31113357 15627

32108857 16127

33104357 16627

 

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

x, y, ans = 0, '', []

num = int('3' + str(x) + '1' + y + '57')

for x in range(0, 10):

for y in range(1, 10000):

num = int('3' + str(x) + '1' + str(y)[1::] + '57')

if num % 1991 == 0 and num not in ans:

ans.append(num)

ans.sort()

for i in ans:

print(i, i // 1991)

Источник: ЕГЭ по ин­фор­ма­ти­ке 19.06.2023. Ос­нов­ная волна. Раз­ные го­ро­да