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

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

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

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

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

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

все усло­вия:

—  со­от­вет­ству­ют маске 1?4*6?8;

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

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

Ответ:

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

Ре­ше­ние.

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

 

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

from fnmatch import *

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

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

if fnmatch(str(x), '1?4*6?8'):

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

print(x, x // 2622)

 

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

154698 59

11468628 4374

12425658 4739

15401628 5874

16476648 6284

17433678 6649

19452618 7419

 

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

from itertools import product

цифры = '0123456789'

# Т. к. число < 10**8 (число 10**8, оче­вид­но, не со­от­вет­ству­ет маске),

# то по­сле­до­ва­тель­ность на месте "*" не может быть длин­нее 2.

звез­ды = [''.join(x) for длина in range(3) for x in product(цифры,repeat=длина)]

# звез­ды - все стро­ки из цифр дли­ной от 0 до 2

числа = sorted([int(f'1{ц1}4{зв}6{ц2}8') for ц1 in цифры for ц2 in цифры for зв in звез­ды])

# числа - сор­ти­ро­ван­ный спи­сок всех чисел мень­ше 10**8, от­ве­ча­ю­щих маске

for x in числа:

if x%2622 == 0: # если число де­лит­ся на 2622 - пе­ча­та­ем

print(x,x//2622)

 


Аналоги к заданию № 59850: 60267 Все

Источник: ЕГЭ по ин­фор­ма­ти­ке 20.06.2023. Ос­нов­ная волна. Даль­ний Во­сток