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

Ал­го­ритм по­лу­ча­ет на вход на­ту­раль­ное число N ≥ 100 и стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом:

1.  Все трой­ки со­сед­них цифр в де­ся­тич­ной за­пи­си N рас­смат­ри­ва­ют­ся как трёхзнач­ные числа (воз­мож­но, с ве­ду­щи­ми ну­ля­ми).

2.  Из спис­ка по­лу­чен­ных на преды­ду­щем шаге трёхзнач­ных чисел вы­де­ля­ют­ся наи­боль­шее и наи­мень­шее.

3.  Ре­зуль­та­том ра­бо­ты ал­го­рит­ма ста­но­вит­ся раз­ность най­ден­ных на преды­ду­щем шаге двух чисел.

 

При­мер. Дано число N  =  20024. Ал­го­ритм ра­бо­та­ет сле­ду­ю­щим об­ра­зом:

1.  В де­ся­тич­ной за­пи­си вы­де­ля­ем трёхзнач­ные числа: 200, 002, 024.

2.  Наи­боль­шее из най­ден­ных чисел 200, наи­мень­шее 002.

3.  200 − 002  =  198.

Ре­зуль­тат ра­бо­ты ал­го­рит­ма R  =  198.

При каком наи­мень­шем N в ре­зуль­та­те ра­бо­ты ал­го­рит­ма по­лу­чит­ся R  =  415?

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

Ре­ше­ние.

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

otv = []

for n in range(100,100000):

n = str(n)

troiki = []

for i in range(len(n)-2):

troiki.append(n[i] + n[i+1] + n[i+2])

k = ''.join(troiki)

r = len(k)-len(n)

if r < 0:

troiki.append(n[r:])

result = [int(item) for item in troiki]

if (max(result)-min(result)) == 415:

otv.append(int(n))

print(min(otv))

 

Ответ: 1572.

 

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

for i in range (1000,100000):

a=[]

s=str(i)

for j in range (0,len(s)-2):

a.append(int(s[j]+s[j+1]+s[j+2]))

if (max(a)-min(a)) == 415:

print(i)

break

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

for x in range(100,10000):

s=str(x)

m=[]

while len(s)>2:

m.append(int(s[:3]))

s=s[1:]

if max(m)-min(m) == 415:

print(x)

break