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

На вход ал­го­рит­ма подаётся на­ту­раль­ное число N. Ал­го­ритм стро­ит по нему новое число R сле­ду­ю­щим об­ра­зом.

1.  Стро­ит­ся тро­ич­ная за­пись числа N.

2.  Далее эта за­пись об­ра­ба­ты­ва­ет­ся по сле­ду­ю­ще­му пра­ви­лу:

а)  если число N де­лит­ся на 3, то слева к нему при­пи­сы­ва­ет­ся «1», а спра­ва «02»;

б)  если число N на 3 не де­лит­ся, то оста­ток от де­ле­ния на 3 умно­жа­ет­ся на 4, пе­ре­во­дит­ся в тро­ич­ную за­пись и до­пи­сы­ва­ет­ся в конец числа.

По­лу­чен­ная таким об­ра­зом за­пись яв­ля­ет­ся тро­ич­ной за­пи­сью ис­ко­мо­го числа R.

3.  Ре­зуль­тат пе­ре­во­дит­ся в де­ся­тич­ную си­сте­му и вы­во­дит­ся на экран.

На­при­мер, для ис­ход­но­го числа 1110  =  1023 ре­зуль­та­том яв­ля­ет­ся число 102223  =  10710, а для ис­ход­но­го числа 1210  =  1103  — это число 1110023  =  35310.

Ука­жи­те мак­си­маль­ное число N, после об­ра­бот­ки ко­то­ро­го с по­мо­щью этого ал­го­рит­ма по­лу­ча­ет­ся число R, не пре­вы­ша­ю­щее 350.

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

Ре­ше­ние.

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

def f(n):

s=''

while n > 0:

s = str(n%3) + s

n //= 3

return s

c = []

for n in range(1000):

s = f(n)

if n%3 == 0:

s = '1' + s + '02'

else:

s = s + f(n%3*4)

r = int(s,3)

if r <= 350:

c.append(n)

print(max(c))

 

Ответ: 38.

 

При­ведём ре­ше­ние Сер­гея Донец на PascalABC:

uses School;

begin

var sp:=new List;

for var n:=1 to 1111 do begin

var t:=tobase(n,3);

var ost:=n mod 3;

if ost=0

then t:='1'+t+'02'

else t:=t+tobase(ost*4,3);

var r:=dec(t,3);

if r<=350 then sp.Add(n);

end;

sp.Max.Print;

end.

Источник: Стат­Град: Тре­ни­ро­воч­ная ра­бо­та 16.12.2025 ИН2510202