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

У ис­пол­ни­те­ля три ко­ман­ды, ко­то­рым при­сво­е­ны но­ме­ра.

1.  При­бавь 1.

2.  Сде­лай чётное.

3.  Сде­лай нечётное.

Пер­вая из них уве­ли­чи­ва­ет на 1 число x на экра­не, вто­рая умно­жа­ет это число на 2, тре­тья пе­ре­во­дит число x в число 2x + 1. На­при­мер, вто­рая ко­ман­да пе­ре­во­дит число 10 в число 20, а тре­тья пе­ре­во­дит число 10 в число 21.

Про­грам­ма для ис­пол­ни­те­ля  — это по­сле­до­ва­тель­ность ко­манд. Сколь­ко су­ще­ству­ет про­грамм, ко­то­рые число 2 пре­об­ра­зу­ют в число 16?

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

Ре­ше­ние.

Обо­зна­чим R(n)  — ко­ли­че­ство про­грамм, ко­то­рые пре­об­ра­зу­ют число 2 в число n.

Верны сле­ду­ю­щие со­от­но­ше­ния.

1.  Если n нечётное, то тогда R(n)  =  R(n – 1) + R((n – 1) : 2) (если n > 5), так как есть два спо­со­ба по­лу­че­ния n: при­бав­ле­ни­ем еди­ни­цы или ис­поль­зо­ва­ни­ем ко­ман­ды 3.

2.   Если n чётное, то тогда R(n)  =  R(n – 1) + R(n : 2) (если n > 4), так как есть два спо­со­ба по­лу­че­ния n: при­бав­ле­ни­ем еди­ни­цы или ис­поль­зо­ва­ни­ем ко­ман­ды 2.

До­ста­точ­но вы­чис­лить зна­че­ния R(n) для всех чисел, не пре­вос­хо­дя­щих 16.

 

Имеем:

R(3)  =  1;

R(4)  =  2;

R(5)  =  3;

R(6)  =  R(5) + R(3)  =  3 + 1  =  4;

R(7)  =  R(6) + R(3)  =  4 + 1  =  5;

R(8)  =  R(7) + R(4)  =  5 + 2  =  7;

R(9)  =  R(8) + R(4)  =  7 + 2  =  9;

R(10)  =  R(9) + R(5)  =  9 + 3  =  12;

R(11)  =  R(10) + R(5)  =  12 + 3  =  15;

R(12)  =  R(11) + R(6)  =  15 + 4  =  19;

R(13)  =  R(12) + R(6)  =  19 + 4  =  23;

R(14)  =  R(13) + R(7)  =  23 + 5  =  28;

R(15)  =  R(14) + R(7)  =  28 + 5  =  33;

R(16)  =  R(15) + R(8)  =  33 + 7  =  40.

 

Ответ: 40.

 

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

def f(x, y):

if x == y:

return 1

if x > y:

return 0

return f(x + 1, y) + f(x * 2, y) + f(2 * x + 1, y)

print(f(2, 16))


Аналоги к заданию № 6965: 7315 Все

Раздел кодификатора ФИПИ: 1.6.2 Вы­чис­ли­мость. Эк­ви­ва­лент­ность ал­го­рит­ми­че­ских мо­де­лей