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

Ис­пол­ни­тель Май16 пре­об­ра­зу­ет число на экра­не. У ис­пол­ни­те­ля есть три ко­ман­ды, ко­то­рым при­сво­е­ны но­ме­ра:

 

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

2.  Умно­жить на 2

3.  Умно­жить на 3

 

Пер­вая ко­ман­да уве­ли­чи­ва­ет число на экра­не на 1, вто­рая умно­жа­ет его на 2, тре­тья – умно­жа­ет на 3.

Про­грам­ма для ис­пол­ни­те­ля Май16  — это по­сле­до­ва­тель­ность ко­манд. Сколь­ко су­ще­ству­ет про­грамм, для ко­то­рых при ис­ход­ном числе 2 ре­зуль­та­том яв­ля­ет­ся число 28 и при этом тра­ек­то­рия вы­чис­ле­ний со­дер­жит число 12 и не со­дер­жит числа 22?

Тра­ек­то­рия вы­чис­ле­ний про­грам­мы  — это по­сле­до­ва­тель­ность ре­зуль­та­тов вы­пол­не­ния всех ко­манд про­грам­мы. На­при­мер, для про­грам­мы 121 при ис­ход­ном числе 7 тра­ек­то­рия будет со­сто­ять из чисел 8, 16, 17.

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

Ре­ше­ние.

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

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

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

2.  Пусть n де­лит­ся на 2 и не де­лит­ся на 3.

Тогда R(n) = R(n - 1) + R(n / 2).

3.  Пусть n де­лит­ся на 3 и не де­лит­ся на 2.

Тогда R(n) = R(n / 3) + R(n - 1).

4.  Пусть n де­лит­ся и на 2 и на 3.

Тогда R(n) = R(n - 1) + R(n / 2) + R(n / 3) .

 

С её по­мо­щью по­сле­до­ва­тель­но вы­чис­лим зна­че­ния R(n):

 

R(2) = 1

R(3) = R(2) + R(1) = 1 + 0 = 1

R(4) = R(3) + R(2) = 1 + 1 = 2

R(5) = R(4) = 2

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

R(7) = R(6) = 4

R(8) = R(7) + R(4) = 4 + 2 = 6

R(9) = R(8) + R(3) = 6 + 1 = 7

R(10) = R(9) + R(5) = 7 + 2 = 9

R(11) = R(10) = 9

R(12) = R(11) + R(6) + R(4) = 9 + 4 + 2 = 15

 

 

Так как в тра­ек­то­рии долж­но при­сут­ство­вать число 12, то для всех сле­ду­ю­щих R(n) нель­зя ис­поль­зо­вать при пе­ре­счёте R(m) такие, что m < 12.

 

R(13) = R(12) = 15

R(22) = R(21) = R(20) = R(19) = R(18) = R(17) = R(16) = R(15) = R(14) = 15

 

Число 22 на­о­бо­рот, не долж­но встре­чать­ся в тра­ек­то­рии, по­это­му не будем учи­ты­вать R(22), то есть все сле­ду­ю­щие R(n) будем под­счи­ты­вать без R(22).

 

R(23) = 0

R(24) = R(23) + R(12) = 15

R(25) = R(24) = 15

R(26) = R(25) + R(13) = 15 + 15 = 30

R(27) = R(26) = 30

R(28) = R(27) + R(14) = 30 + 15 = 45

 

Ответ: 45.

 

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

def f(x, y):

if x == y:

return 1

if x > y or x == 22:

return 0

else:

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

print(f(2, 12) * f(12, 28))


Аналоги к заданию № 5064: 5096 11251 11278 Все

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