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

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

 

1.  при­бавь 2,

2.  умножь на 3.

 

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

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

Ре­ше­ние.

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

 

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

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

 

2.  Пусть n де­лит­ся на 3. Тогда R(n) = R(n / 3) + R(n − 2).

 

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

 

R(2) = 0,

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

R(4) = R(2) = 0,

R(5) = R(3) = 2,

R(6) = R(4) + R(2) = 0,

R(7) = R(5) = 2,

R(8) = R(6) = 0,

R(9) = R(7) + R(3) = 2 + 2 = 4,

...

R(12) = R(10) + R(4) = 0 + 0 = 0,

...

R(15) = R(13) + R(5) = 4 + 2 = 6,

...

R(18) = R(16) + R(6) = 0 + 0 = 0,

...

R(21) = R(19) + R(7) = 6 + 2 = 8,

...

R(24) = R(22) + R(8) = 0 + 0 = 0,

...

R(27) = R(25) + R(9) = 8 + 4 = 12,

...

R(30) = R(28) + R(10) = 0 + 0 = 0,

...

R(33) = R(31) + R(11) = 12 + 4 = 16,

...

R(36) = R(34) + R(12) = 0 + 0 = 0,

...

R(39) = R(37) + R(13) = 16 + 4 = 20,

...

R(42) = R(40) + R(14) = 0 + 0 = 0,

...

R(45) = R(43) + R(15) = 20 + 6 = 26,

...

R(48) = R(46) + R(16) = 0 + 0 = 0,

 

R(49) = R(47) = 26.

 

Ответ: 26.

 

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

def f(x, y):

if x == y:

return 1

if x > y:

return 0

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

print(f(1, 49))

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