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

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

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

2.  К этой за­пи­си до­пи­сы­ва­ют­ся спра­ва ещё не­сколь­ко раз­ря­дов по сле­ду­ю­ще­му пра­ви­лу:

3.  а)  если N чётное, то к нему спра­ва при­пи­сы­ва­ет­ся один ноль, а слева еди­ни­ца и ноль;

4.  б)  если N нечётное, то к нему спра­ва при­пи­сы­ва­ет­ся в дво­ич­ном виде сумма цифр его дво­ич­ной за­пи­си;

По­лу­чен­ная таким об­ра­зом за­пись (в ней как ми­ни­мум на один раз­ряд боль­ше, чем в за­пи­си ис­ход­но­го числа N) яв­ля­ет­ся дво­ич­ной за­пи­сью ис­ко­мо­го числа R.

На­при­мер, ис­ход­ное число 410  =  1002 пре­об­ра­зу­ет­ся в число 1010002  =  4010, а ис­ход­ное число 1310  =  11012 пре­об­ра­зу­ет­ся в число 1101112  =  5510.

Ука­жи­те такое число N, для ко­то­ро­го число R яв­ля­ет­ся наи­мень­шим среди чисел, пре­вы­ша­ю­щих 600. В от­ве­те это число за­пи­ши­те в де­ся­тич­ной си­сте­ме счис­ле­ния.

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

Ре­ше­ние.

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

otv = c = 10**10

for n in range(20,2000):

s = bin(n)[2:]

if n%2==0:

s = '10' + s + '0'

else:

s = s + bin(s.count('1'))[2:]

r = int(s,2)

if r > 600 and c > r:

otv = n

c = r

print(otv)

 

 

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

f = lambda n: b + bin(sum(map(int, list(b))))[2:] if (b:=bin(n)[2:]) and n%2 else '10' + b + '0'

spi = sorted([(v, n) for n in range(1, 2000) if (v:=int(f(n), 2)) > 600])

print(spi[0][1])

 

 

Ответ: 75.

Источник: Проб­ный ЕГЭ Санкт-Пе­тер­бург, 20.02.2025. Ва­ри­ант 1