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

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

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

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

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

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

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

Ре­ше­ние.

По­стро­им две таб­ли­цы  — от 2 до 9 и от 9 до 19  — и най­дем ко­ли­че­ство тра­ек­то­рий из 2 в 9 и из 9 в 19:

 

23456789
1123691525

 

910111213141516171819
11202246101626

 

Для по­лу­че­ния от­ве­та пе­ре­мно­жим зна­че­ния для 9 и 19: 25 · 26  =  650.

 

При­ведём про­грамм­ное ре­ше­ние.

 

Пас­каль

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

begin

    if a = b then f := 1

    else if (a > b) or (a = 12) then f := 0

    else f := f(a+1, b) + f(a+2, b) + f(a*3, b);

end;

begin

    writeln(f(2, 9)*f(9, 19))

end.

Python

def f(a, b):

    if a == b:

        return 1

    if a > b or a == 12:

        return 0

    return f(a+1, b) + f(a+2, b) + f(a*3, b)

print(f(2, 9) * f(9, 19))

С++

#include <iostream>

using namespace std;

int f(int a, int b){

    if(a == b) return 1;

    if(a > b or a == 12) return 0;

    return f(a+1, b) + f(a+2, b) + f(a*3, b);

}

int main(){

    std::cout << (f(2, 9) * f(9, 19));

}

 

Ответ: 650.


Аналоги к заданию № 55819: 35481 35912 37158 Все

Источник: ЕГЭ по ин­фор­ма­ти­ке 24.06.2021. Ос­нов­ная волна
Раздел кодификатора ФИПИ: