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

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

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

A.  Вы­честь 1.

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

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

Про­грам­ма для ис­пол­ни­те­ля  — это по­сле­до­ва­тель­ность ко­манд. На­при­мер, про­грам­ма BAC при ис­ход­ном числе 2 по­сле­до­ва­тель­но по­лу­чит числа 4, 3, 9.

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

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

Ре­ше­ние.

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

def f(start, end, k):

if start > end + 1:

return 0

if start == end:

return 1

else:

if k == 1:

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

else:

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

print(f(3, 20, 0))

 

Ответ: 4.

 

При­ведём ре­ше­ние Алек­сандра Ка­ще­е­ва на языке Python.

def A(i):

b.append(i+0.9)

return b

def BC(i):

if i%2==0: b.append(int(i/2))

if i%3==0: b.append(int(i/3))

return b

a,k=[20],3

n,b=0,[]

while True:

b.clear()

for i in a:

if i==k or i==k-0.1:

n+=1

if i>1:

if type(i)==float:

i=int(i+0.1)

BC(i)

else: A(i);BC(i)

if b==[]:break

a=b.copy()

print(n))


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