﻿/*
    Sorozatok előállítása (generálása)


    - valamilyen szabály szerint előállítunk egy
    sorozatot, azaz kiírjuk annak az első valahány
    elemét

Feladat: Adott n. Írjuk ki az első n darab
kettőhatványt.
    Pl. n = 10 esetén a kimenet:
        1 2 4 8 16 32 64 128 256 512
*/
/*
#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "n = ";
    cin >> n;

    cout << "Az elso " << n << " darab 2-hatvany:"
         << endl;

    int hatvany = 1;

    for (int i = 1; i <= n; i++) {
        cout << hatvany << " ";
        hatvany *= 2;
    }

    cout << endl;
    return 0;
}
*/

/*
    Fibonacci-sorozat

    Egyik értelmezés:
        F(1)=1, F(2)=1
        F(n) = F(n-1) + F(n-2)  bármely n >= 3 esetén

    Másik értelmezés:
        F(0)=0, F(1)=1
        F(n) = F(n-1) + F(n-2) bármely n >= 2 esetén


    Elemek:

        1 1 2 3 5 8 13 21 34 55 89 144 ......

    Feladat: adott n, írjuk ki a sorozat első n darab
    tagját.
    Pl. n = 5-re a kimenet: 1 1 2 3 5
*/
/*
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int a = 1;
    int b = 1;

    for (int i = 1; i <= n; i++) {
        cout << a << " ";

        // int regi_a = a;
        // a = b;
        // b = regi_a + b;

        int c = a+b;
        a = b;
        b = c;
    }

    return 0;
}
*/

/*
    Feladat: Adott n. Írjuk ki az n-nél kisebb
    Fibonacci-számokat (a Fibonacci-sorozat n-nél
    kisebb elemeit).
*/
/*
#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    int a = 1;
    int b = 1;

    // Jázmin-féle megoldás:
    // if(n>=2){
    //     cout<<a<<endl;
    //     cout<<b<<endl;
    //     while(a+b < n){
    //
    //     int regi_a = a;
    //     a = b;
    //     b = regi_a + b;
    //
    //     cout<<b<<endl;
    //     }
    // }


    while (a < n) {
        cout << a << " ";

        int c = a+b;
        a = b;
        b = c;
    }

    return 0;
}
*/

/*
    HF: Adott az alábbi sorozat:
        F(1) = 1, F(2) = 1, F(3) = 1
        F(n) = F(n-1) + F(n-2) + F(n-3)
            bármely n >= 4

        1 1 1 3 5 9 17 31 ....

    Beolvasunk egy n számot, írjuk ki:
        a) az első n elemet
        b) az első olyan elemet, ami nagyobb, mint n
*/

/*
    HF: Adott az alábbi sorozat:
        F(1) = 1, F(2) = 1, F(3) = 1
        F(n) = F(n-1) + F(n-2) + F(n-3)
            bármely n >= 4

        1 1 1 3 5 9 17 31 ....

    Beolvasunk egy n számot, írjuk ki:
        a) az első n elemet
        b) az első olyan elemet, ami nagyobb, mint n
*/

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;

    // a)
    int a = 1;
    int b = 1;
    int c = 1;

    for (int i = 1; i <= n; i++) {
        cout << a << " ";

        int d = a+b+c;
        a = b;
        b = c;
        c = d;
    }
    cout << endl;

    // b)
    a = 1;
    b = 1;
    c = 1;

    while (a <= n) {
        int d = a+b+c;
        a = b;
        b = c;
        c = d;
    }

    cout << a << endl;

    return 0;
}
