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

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

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

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

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

Среди на­ту­раль­ных чисел, не пре­вы­ша­ю­щих 108, най­ди­те все числа, со­от­вет­ству­ю­щие маске 12??1*56, де­ля­щи­е­ся на 317 без остат­ка.

В от­ве­те за­пи­ши­те в пер­вом столб­це таб­ли­цы все най­ден­ные числа в по­ряд­ке воз­рас­та­ния, а во вто­ром столб­це  — со­от­вет­ству­ю­щие им ре­зуль­та­ты де­ле­ния этих чисел на 317.

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

Ответ:

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

Ре­ше­ние.

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

 

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

from fnmatch import *

for x in range(0, 10**8, 317): # Пе­ре­би­ра­ем все числа от 0 с шагом 317, будут по­лу­че­ны числа крат­ные 317

if fnmatch(str(x), '12??1*56'):# Про­ве­ря­ем по­лу­чен­ное число со­от­вет­ствию за­да­нию

print(x, x // 317)

 

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

1226156 3868

12321156 38868

12511356 39468

12701556 40068

12891756 40668

При­ведём ре­ше­ние Ев­ге­ния Дж­об­са.

За­ме­тим, что при огра­ни­че­нии до 108 на месте звез­доч­ки может сто­ять не боль­ше од­но­го раз­ря­да. По­это­му до­ста­точ­но пе­ре­брать два ва­ри­ан­та  — пу­стая стро­ка на месте звез­доч­ки и 1 сим­вол на месте звез­доч­ки.

for a in range(10):

for b in range(10):

x = 12*10**5 + a*10**4 + b*10**3 + 156

# можно за­ме­нить на

# x = int(f'12{a}{b}156')

if x % 317 == 0:

print(x, x // 317)

for a in range(10):

for b in range(10):

for c in range(10):

x = 12*10**6 + a*10**5 + b*10**4 + 1*1000 + c*100 + 56

# можно за­ме­нить на

# x = int(f'12{a}{b}1{c}56')

if x % 317 == 0:

print(x, x // 317)

 

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

a = ['', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

for i in range(0,10):

for j in range(0,10):

for k in a:

s = '12' + str(i) + str(j) + '1' + k +'56'

n = int(s)

if n % 317 == 0:

print(n, n // 317)

 

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

from re import fullmatch

for n in range(0, 10**8, 317):

if fullmatch(r'12\d{2}1.*56', str(n)):

print(n, n // 317)

 

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

d = '0123456789'

nums = sorted([int(f'12{x}{y}1{s}56') for x in d for y in d for s in ['']+list(d)])

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

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