profile
Размещено 2 года назад по предмету Информатика от koko896

Вам нужно выложить плиткой А * 2 коридора.
Существует 2 вида плитки:
1) 1*1,
2) Г-образный
Напишите код c++ который посчитает сколько существует различных способов вымостить коридор. К примеру если А=2 тогда ответ должен быть 5.

  1. Ответ на вопрос
    Ответ на вопрос дан antarctica123

    Відповідь:

    #include <iostream>

    using namespace std;

    int main() {

       int n, f1 = 1, f2 = 2, f3; // начальные значения

       cin >> n;

       if (n == 1) cout << f1; // отдельный случай для n=1

       else if (n == 2) cout << f2; // отдельный случай для n=2

       else {

           for (int i = 3; i <= n; i++) {

               f3 = f1 + f2;

               f1 = f2;

               f2 = f3;

           }

           cout << f3; // результат

       }

       return 0;

    }

    Пояснення:

  2. Ответ на вопрос
    Ответ на вопрос дан nurbekjonakhmatov

    Ответ:

    Для решения данной задачи можно использовать динамическое программирование. Создадим массив dp размера A+1, где dp[i] будет хранить количество способов вымостить коридор длины i. Изначально все элементы dp установим в 0.

    Для i=1 dp[i] равно 1, так как существует только один способ вымостить коридор длины 1.

    Для i=2 dp[i] равно 3, так как существует три способа вымостить коридор длины 2: двумя плитками 1*1, одной плиткой Г-образной или двумя плитками Г-образными.

    Для i>2 мы можем выложить первую плитку либо 11, либо Г-образную. Если мы выложили плитку 11, то оставшуюся часть коридора нужно вымостить способом, который соответствует длине i-1, то есть dp[i-1]. Если мы выложили Г-образную плитку, то оставшуюся часть коридора нужно вымостить способом, который соответствует длине i-2, то есть dp[i-2]. Таким образом, мы можем записать рекуррентную формулу:

    dp[i] = dp[i-1] + dp[i-2]

    Наша цель - посчитать dp[A]. Для этого нам необходимо заполнить массив dp начиная с dp[3] по формуле выше.

    Вот код на C++:

    #include <iostream>

    using namespace std;

    int main() {

       int A;

       cin >> A;

       int dp[A+1];

       dp[1] = 1;

       dp[2] = 3;

       for (int i = 3; i <= A; i++) {

           dp[i] = dp[i-1] + dp[i-2];

       }

       cout << dp[A] << endl;

       return 0;

    }

    Объяснение:

    Пример работы программы:

    Input:

    2

    Output:

    5

    Input:

    4

    Output:

    11

    1. Ответ на вопрос
      Ответ на вопрос дан koko896
      Eсли а=2 то должно быть 5 а здесь ответ 3
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.