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

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

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

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

Пер­вая ко­ман­да уве­ли­чи­ва­ет число на экра­не на 1, вто­рая умно­жа­ет его на 2. Про­грам­ма для ис­пол­ни­те­ля Раз­Два  — это по­сле­до­ва­тель­ность ко­манд. Ука­жи­те наи­мень­шее на­ту­раль­ное число, ко­то­рое нель­зя по­лу­чить из ис­ход­но­го числа 1, вы­пол­нив про­грам­му ис­пол­ни­те­ля Раз­Два, со­дер­жа­щую не более пяти ко­манд.

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

Ре­ше­ние.

Из числа 1 одной ко­ман­дой можно по­лу­чить толь­ко число 2. Двумя ко­ман­да­ми можно по­лу­чить либо число 3, либо число 4. Тремя ко­ман­да­ми можно по­лу­чить числа 4, 5, 6, 8. Че­тырь­мя ко­ман­да­ми можно по­лу­чить числа 5, 6, 7, 8, 9, 10, 12 и 16. На­ко­нец, пятью ко­ман­да­ми можно по­лу­чить числа 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 24, 32.

За­ме­тим, что наи­мень­шее число, ко­то­ро­го нет среди по­лу­чен­ных ранее чисел,  — 15. Таким об­ра­зом, ответ  — 15.

 

Ответ: 15.

 

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

def f(x, h):

if h == 5:

a.add(x)

else:

f(x + 1, h + 1)

f(x * 2, h + 1)

 

a = set()

f(1, 0)

print(a)

В по­лу­чен­ном мно­же­стве от­сут­ству­ет число 15, оно и будет яв­лять­ся от­ве­том.

 

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

def f(x, y, n):

if x > y or n < 0:

return 0

if x == y:

return 1

return f(x + 1, y, n - 1) + f(x * 2, y, n - 1)

for i in range(2, 100):

if f(1, i, 5) == 0:

print(i)

break

 

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

def f(x, h=0):

if h <= 5:

a.add(x)

if h == 5:

a.add(x)

return

f(x + 1, h + 1)

f(x * 2, h + 1)

a = set()

f(1)

print(sorted(a))


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

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