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

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

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

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

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

Пер­вая из них уве­ли­чи­ва­ет число на экра­не на 1, вто­рая уве­ли­чи­ва­ет его на 2, тре­тья умно­жа­ет на 3. Про­грам­ма для ис­пол­ни­те­ля М17  — это по­сле­до­ва­тель­ность ко­манд. Сколь­ко су­ще­ству­ет таких про­грамм, ко­то­рые пре­об­ра­зу­ют ис­ход­ное число 2 в число 12 и при этом тра­ек­то­рия вы­чис­ле­ний про­грам­мы со­дер­жит числа 8 и 10? Тра­ек­то­рия долж­на со­дер­жать оба ука­зан­ных числа.

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

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

Ре­ше­ние.

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

Будем ре­шать за­да­чу с конца. Число 12 из числа 10 можно по­лу­чить двумя спо­со­ба­ми (10 + 1 + 1; 10 + 2). Число 10 из числа 8 можно по­лу­чить двумя спо­со­ба­ми (8 + 1 + 1; 8 + 2). Оста­ет­ся узнать ко­ли­че­ство спо­со­бов по­лу­че­ния числа 8 из числа 2. Нач­нем свои рас­суж­де­ния с числа 3, так как двой­ка  — это на­чаль­ное число. Трой­ку можно по­лу­чить толь­ко одним спо­со­бом  — при­ба­вив 1. Чет­вер­ку по­лу­чим двумя спо­со­ба­ми  — при­ба­вив еди­ни­цу к трой­ке или до­ба­вив двой­ку к двой­ке и так далее. За­пи­шем эти рас­суж­де­ния в сле­ду­ю­щем виде:

 

R(2)  =  1;

R(3)  =  R(2)  =  1;

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

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

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

R(7)  =  R(6) + R(5)  =  6 + 3  =  9;

R(8)  =  R(7) + R(6)  =  9 + 6  =  15.

 

Таким об­ра­зом, ко­ли­че­ство про­грамм, удо­вле­тво­ря­ю­щих усло­вию за­да­чи, равно R(2) · R(8) · R(10) · R(12)  =  1 · 15 · 2 · 2  =  60.

 

Ответ: 60.

 

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

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

i:integer;

begin

for i:=2 to 8 do begin

a[2]:=1;

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

if i mod 3 <> 0 then a[i]:=a[i-1]+a[i-2];

end;

for i:=2 to 7 do

a[i]:=0;

for i:=9 to 10 do begin

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

if i mod 3 <> 0 then a[i]:=a[i-1]+a[i-2];

end;

for i:=7 to 9 do

a[i]:=0;

for i:=11 to 12 do begin

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

if i mod 3 <> 0 then a[i]:=a[i-1]+a[i-2];

end;

println(a[12]);

end.

 

При­ведём ре­ше­ние Сер­гея Ни­ки­фо­ро­ва на языке 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 * 3, y)

print(f(2, 8) * f(8, 10) * f(10, 12))

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