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

Ис­пол­ни­тель пре­об­ра­зу­ет число на экра­не.

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

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

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

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

Про­грам­ма для ис­пол­ни­те­ля  — это по­сле­до­ва­тель­ность ко­манд. На­при­мер, если в на­чаль­ный мо­мент на экра­не на­хо­дит­ся число 1, то про­грам­ма 212 по­сле­до­ва­тель­но пре­об­ра­зу­ет его в 2, 3, 6.

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

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

Ре­ше­ние.

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

def f(start, end, k, c):

if start > end:

return 0

if start == end:

return 1

if start < end:

if k == c == '+':

return f(start*2, end, '*', k)

elif k == c == '*':

return f(start + 1, end, '+', k)

else:

return f(start + 1, end, '+', k) + f(start * 2, end, '*',k)

print(f(1, 16, '0', '0'))

Здесь k   и с  — пе­ре­мен­ные, ко­то­рые от­ве­ча­ют за то, чтобы не по­вто­ря­лись умно­же­ние и сло­же­ние более двух раз под­ряд.

 

Ответ: 5.

 

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

def f (start, end, s):

if start == end and '+++' not in s and '***' not in s:

return 1

elif start > end:

return 0

return f(start + 1, end, s + '+')+ f(start*2, end, s + '*')

print(f(1, 16, ''))


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