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

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

 

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

2.  при­бавь 5.

 

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

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

Ре­ше­ние.

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

 

Обе ко­ман­ды уве­ли­чи­ва­ют ис­ход­ное число, по­это­му ко­ли­че­ство ко­манд не может пре­вос­хо­дить 16  — 2  =  14. При этом ми­ни­маль­ное ко­ли­че­ство ко­манд  — 6 (т. к. [16 − 2]/5 = 2).

 

Ко­манд может быть 6, 10 или 14. Пяти ко­ман­дам со­от­вет­ству­ет набор 221111 (15 воз­мож­ных ва­ри­ан­тов рас­по­ло­же­ния: это число пе­ре­ста­но­вок с по­вто­ре­ни­я­ми P6(2,4)  =  5!/(2! · 3!)), де­вя­ти ко­ман­дам  — набор 2111111111 (10 воз­мож­ных ва­ри­ан­тов рас­по­ло­же­ния), 14 ко­ман­дам  — 11...1 (1 ва­ри­ант рас­по­ло­же­ния). Всего имеем 26 про­грамм.

 

Ответ: 26.

 

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

def f(x, y):

if x == y:

return 1

if x > y:

return 0

else:

return f(x + 1, y) + f(x + 5, y)

print(f(2, 16))

Источники: