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

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

 

1.  при­бавь один,

2.  умножь на пол­то­ра.

 

Пер­вая из них уве­ли­чи­ва­ет на 1 число на экра­не, вто­рая уве­ли­чи­ва­ет это число в 1,5 раза, если число чётное. К нечётным чис­лам вто­рая ко­ман­да не­при­ме­ни­ма.

Про­грам­ма для Пол­то­ра - это по­сле­до­ва­тель­ность ко­манд.

Сколь­ко су­ще­ству­ет про­грамм, ко­то­рые число 1 пре­об­ра­зу­ют в число 22?

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

Ре­ше­ние.

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

 

Верны сле­ду­ю­щие утвер­жде­ния:

 

1.  Если n де­лит­ся на 1,5 и ре­зуль­тат де­ле­ния  — нечётное число, то тогда R(n) = R(n−1), так как су­ще­ству­ет един­ствен­ный спо­соб по­лу­че­ния n из (n−1)  — при­бав­ле­ни­ем еди­ни­цы.

 

2.  Если n де­лит­ся на 1,5 и ре­зуль­тат де­ле­ния  — чётное число, тогда R(n) = R(n / 1,5) + R(n − 1). До­ста­точ­но вы­чис­лить все зна­че­ния R(n). За­ме­тим, что R от чет­но­го числа все­гда равно нулю. R от числа, ко­то­рое после вы­чи­та­ния 1 не крат­но 2, тоже равно нулю.

 

R(2) = 1,

R(3) = 2 (можно умно­жить двой­ку на 1,5 или при­ба­вить 1 к еди­ни­це),

R(4) = R(3) = 2,

R(5) = R(4) = 2,

R(6) = R(4) + R(5) = 4,

...

R(9) = R(6) + R(8) = 4 + 4 = 8,

...

R(12) = R(8) + R(11) = 4 + 8 = 12,

...

R(15) = R(10) + R(14) = 8 + 12 = 20,

...

R(18) = R(12) + R(17) = 12 + 20 = 32,

...

R(21) = R(14) + R(7) = 12 + 32 = 44.

 

R(22) = R(19) + R(7) = 44.

 

Ответ: 44.

 

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

def f(x, y):

if x == y:

return 1

if x > y:

return 0

else:

if x % 2 == 0:

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

else:

return f(x + 1, y)

print(f(1, 22))

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