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

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

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

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

а)  скла­ды­ва­ют­ся все цифры дво­ич­ной за­пи­си, и оста­ток от де­ле­ния суммы на 2 до­пи­сы­ва­ет­ся в конец числа (спра­ва). На­при­мер, за­пись 10000 пре­об­ра­зу­ет­ся в за­пись 100001;

б)  над этой за­пи­сью про­из­во­дят­ся те же дей­ствия  — спра­ва до­пи­сы­ва­ет­ся оста­ток от де­ле­ния суммы цифр на 2.

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

Ука­жи­те такое наи­мень­шее число N, для ко­то­ро­го ре­зуль­тат ра­бо­ты ал­го­рит­ма боль­ше 97. В от­ве­те это число за­пи­ши­те в де­ся­тич­ной си­сте­ме счис­ле­ния.

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

Ре­ше­ние.

Если из­на­чаль­но сумма раз­ря­дов была чётная, то в конец за­пи­шет­ся 00, что эк­ви­ва­лент­но N arrow N умно­жить на 4.

Если же сумма была нечётная, то за­пи­шет­ся 10, что эк­ви­ва­лент­но N arrow N умно­жить на 4 плюс 2.

В обоих слу­ча­ях число по­лу­ча­ет­ся чётным.

 

По­смот­рим на чётные числа, пре­вос­хо­дя­щие 97.

98_10 = 1100010_2  — на конце 10, но сумма осталь­ных раз­ря­дов чётна, не под­хо­дит ни под один из слу­ча­ев.

100_10 = 1100100_2  — на конце 00, но сумма осталь­ных раз­ря­дов нечётна, не под­хо­дит.

102_10 = 1100110_2  — на конце 10, а сумма осталь­ных раз­ря­дов нечётна. Число под­хо­дит под вто­рой слу­чай, зна­чит, число, из ко­то­ро­го оно было по­лу­че­но, равно  дробь: чис­ли­тель: 102 минус 2, зна­ме­на­тель: 4 конец дроби = 25.

 

Ответ: 25.

 

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

def f(s):

summa = 0

for i in range(len(s)):

summa += int(s[i])

return summa

for n in range(1, 100):

s = bin(n)[2:] # пе­ре­вод в дво­ич­ную си­сте­му

s = str(s)

summa = f(s)

s = s + str(summa % 2)

summa = f(s)

s = s + str(summa % 2)

r = int(s, 2) # пе­ре­вод в де­ся­тич­ную си­сте­му

if r > 97:

print(n)

break

 

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

for n in range(0, 1000000):

r=bin(n)[2:]

r+= str(r.count('1')%2)

r+= str(r.count('1')%2)

if int(r,2)>97:

print (n)

break


Аналоги к заданию № 10468: 10495 27402 79718 Все

Раздел кодификатора ФИПИ: 1.6.3 По­стро­е­ние ал­го­рит­мов и прак­ти­че­ские вы­чис­ле­ния