Решение задачи Две последовательности с Acmp

Без пояснения   Просмотров: 38


Определим последовательности an и bn следующим образом: a1 = 2, a2 = 3, a3 = 4, a4 = 7, a5 = 13, an = bn−1 + bn−3, n > 5, bn — последовательность чисел, не входящих в an, записанных в возрастающем порядке.

Таким образом, последовательность an будет выглядеть следующим образом: 2, 3, 4, 7, 13, 15,..., а последовательность bn – 1, 5, 6, 8, 9, 10,....

Ваша задача состоит в том, чтобы найти an и bn.

Код

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    vector<int> a;
    vector<int> b;
    a.push_back(2);
    a.push_back(3);
    a.push_back(4);
    a.push_back(7);
    //a.push_back(13);
    b.push_back(1);
    b.push_back(5);
    b.push_back(6);
    b.push_back(8);
    /*b.push_back(10);
    b.push_back(11);
    b.push_back(12);*/
    int i = 4;
    while(a.size() <= n || b.size() <= n){
        a.push_back(b[i - 1] + b[i - 3]);
        ++i;
        /*for(int j = 0; j < a.size(); ++j)
            cout << a[j] << " ";
        cout << endl;*/
        //cout << b[b.size() - 1] << endl << a[a.size() - 1];
        if(b[b.size() - 1] + 1 < a[a.size() - 1])
            for(int j = b[b.size() - 1] + 1; j < a[a.size() - 1]; ++j)
                if(j != a[a.size() - 2])
                    b.push_back(j);
    }
     /*for(int j = 0; j < a.size(); ++j)
            cout << a[j] << " ";
        cout << endl;
     for(int j = 0; j < b.size(); ++j)
            cout << b[j] << " ";
        cout << endl;*/
    cout << a[n - 1] << endl << b[n - 1];
    return 0;
}

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться