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

Ал­го­ритм вы­чис­ле­ния зна­че­ния функ­ции F(n), где n  — целое не­от­ри­ца­тель­ное число, задан сле­ду­ю­щи­ми со­от­но­ше­ни­я­ми:

F(0)  =  0;

F(n)  =  F(n / 2), если n > 0 и при этом чётно;

F(n)  =  1 + F(n − 1), если n нечётно.

 

Сколь­ко су­ще­ству­ет таких чисел n, что 1 ≤ n ≤ 500 и F(n)  =  3?

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

Ре­ше­ние.

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

Функ­ция под­счи­ты­ва­ет сумму цифр (или, что то же самое, ко­ли­че­ство еди­ниц) в дво­ич­ной за­пи­си числа.

Из усло­вия сле­ду­ет, что тре­бу­ет­ся найти ко­ли­че­ство чисел, дво­ич­ная за­пись ко­то­рых со­дер­жит три еди­ни­цы.

Число 500 в дво­ич­ной за­пи­си - это 111110100, оно со­сто­ит из 9 цифр.

Оче­вид­но, что числа из 9 цифр и боль­шие 500 (т. е. 501-511) со­дер­жат более трёх еди­ниц.

По­это­му ответ к за­да­че - это число со­че­та­ний из 9 по 3: 9 · 8 · 7/(1 · 2 · 3)=84.

 

 

 

При­ведём про­грам­му на PascalABC, ре­ша­ю­щую дан­ную за­да­чу:

var n: longint;

i, count: integer;

function F(n: longint): longint;

begin

if n = 0

then F := 0

else if (((n mod 2) = 0) and (n > 0))

then F := F(n div 2)

else if ((n mod 2) <> 0)

then F := 1 + F(n - 1);

end;

begin

count := 0;

for i := 1 to 500 do

if F(i) = 3 then count := count + 1;

writeln(count);

end.

 

Ре­зуль­тат ра­бо­ты про­грам­мы  — 84.

 

Ответ: 84.

 

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

def F(n):

if n == 0:

return 0

if n % 2 == 0 and n > 0:

return F(n // 2)

if n % 2 != 0:

return 1 + F(n - 1)

k = 0

for i in range(1, 501):

if F(i) == 3:

k += 1

print(k)

 

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

print(len([x for x in range(1,501) if bin(x)[2:].count('1')==3]))


Аналоги к заданию № 35990: 38950 39245 Все

Раздел кодификатора ФИПИ: 1.5.3 Ин­дук­тив­ное опре­де­ле­ние объ­ек­тов