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

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

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

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

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

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

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

Про­грам­ма для ис­пол­ни­те­ля А16  — это по­сле­до­ва­тель­ность ко­манд.

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

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

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

Ре­ше­ние.

Ис­ко­мое ко­ли­че­ство про­грамм равно про­из­ве­де­нию ко­ли­че­ства про­грамм, по­лу­ча­ю­щих из числа 3 число 10, на ко­ли­че­ство про­грамм, по­лу­ча­ю­щих из числа 10 число 12.

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

Для всех n > 5 верны сле­ду­ю­щие со­от­но­ше­ния:

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

2.  Если n де­лит­ся на 2, тогда R(n)  =  R(n – 1) + R(n – 2) + R(n : 2). Ана­ло­гич­но P(n)  =  P(n – 1) + P(n – 2) + P(n : 2).

 

По­сле­до­ва­тель­но вы­чис­лим зна­че­ния R(n):

R(3)  =  1;

R(4)  =  R(3)  =  1;

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

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

R(7)  =  R(6) + R(5)  =  4 + 2  =  6;

R(8)  =  R(7) + R(6) + R(4)  =  6 + 4 + 1  =  11;

R(9)  =  R(8) + R(7)  =  11 + 6  =  17;

R(10)  =  R(9) + R(8) + R(5)  =  17 + 11 + 2  =  30.

 

Те­перь вы­чис­лим зна­че­ния P(n):

P(10)  =  1;

P(11)  =  P(10)  =  1;

P(12)  =  P(11) + P(10)  =  2.

 

Таким об­ра­зом, ко­ли­че­ство про­грамм, удо­вле­тво­ря­ю­щих усло­вию за­да­чи, равно 30 · 2  =  60.

 

Ответ: 60.

 

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

var a:array [-5..12] of integer;

i:integer;

begin

for i:=3 to 10 do begin

a[1]:=1;

if i mod 2 =0 then a[i]:=a[i-1]+a[i-2]+a[i div 2];

if i mod 2 =1 then a[i]:=a[i-1]+a[i-2];

end;

for i:=1 to 9 do

a[i]:=0;

for i:=11 to 12 do begin

if i mod 2 =0 then a[i]:=a[i-1]+a[i-2]+a[i div 2];

if i mod 2 =1 then a[i]:=a[i-1]+a[i-2];

end;

println(a[12])

end.

 

При­ведём ре­ше­ние Павла Шост­ка на языке PascalABC.

function f(a,b:integer):integer:=

a>b?0:a=b?1:f(a+1,b)+f(a+2,b)+f(a*2,b);

print(f(3,10)*f(10,12));

 

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

def f(x, y):

if x > y:

return 0

if x == y:

return 1

else:

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

print(f(3, 10) * f(10, 12))

 

 

О том, как ре­ша­ли бы эту за­да­чу ра­бо­та­ю­щие про­грам­ми­сты,

рас­ска­зал Роман Во­ро­нов в ТикТо­ке: https://www.tiktok.com/@_rioran_/video/7529910748902968577

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ—2017 по ин­фор­ма­ти­ке
Раздел кодификатора ФИПИ: 1.6.2 Вы­чис­ли­мость. Эк­ви­ва­лент­ность ал­го­рит­ми­че­ских мо­де­лей