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

Az alábbi feladatokban valamilyen megadott szabály szerint sorozatokat állítunk elő és írjuk ki azok valahány elemét.

Feladatok

1.

Adott egy n bemeneten (cin). Egy fájlba írjuk ki az első n darab pozitív négyzetszámot!

    Pl.  n = 5-re:
        1  4  9  16  25
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream ki("output.txt");

    int n;
    cout << "n = ";
    cin >> n;

    for (int i = 1; i <= n; i++) {
        ki << i*i << " ";
    }

    cout << endl;
    return 0;
}

2.

Adott egy n bemeneten (cin). Egy fájlba írjuk ki az első n darab kettőhatványt!

    Pl.  n = 5-re:
        1  2  4  8  16

    Pl. n = 12-re:
        1 2 4 8 16 32 64 128 256 512 1024 2048
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ofstream ki("output.txt");

    int n;
    cout << "n = ";
    cin >> n;

    int seged = 1;
    for (int i = 0; i < n; i++) {
        ki << seged << " ";
        seged = seged * 2;
    }

    cout << endl;
    return 0;
}

3.

Adott egy n bemeneten (cin). Egy fájlba írjuk ki az alábbiakat (a ^ karakter hatványozást jelent):

    1^1  2^2   3^3  .... n^n

    Pl.  n = 4-re:
        1  4  27  256
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main()
{
    ofstream ki("output.txt");

    int n;
    cout << "n = ";
    cin >> n;

    /*
    for (int i = 1; i <= n; i++)
        ki << pow(i, i) << " ";
    ki << endl;
    */

    for (int i = 1; i <= n; i++) {
        long long szorzat = 1;

        // i-szer
        for (int j = 1; j <= i; j++)
            szorzat = szorzat * i;

        ki << szorzat << " ";
    }

    ki << endl;
    return 0;
}

Fibonacci sorozat

Adott 1 1 2 3 5 8 13 21 34 55 89 144 … sorozat, melyet a következő szabályok határoznak meg:

    F(1) = 1,
    F(2) = 1,
    F(n) = F(n-1) + F(n-2), minden n >= 3 esetén.

Feladat: adott n esetén írjuk ki a sorozat n-edik elemét!

Ötlet: két változóban tároljuk a legutóbbi két elemet, ezekből mindig egy-egy újabb elem kiszámolható, majd a két változó csúszhat előre (változik, hogy melyik a két legutóbbi elem).

     a | 1    1   2   3   5 ...
    ---+-----------------------
     b | 1    2   3   5   8 ...
    ---+-----------------------
     c |    2   3   5   8   ...
    ---+-----------------------
     i |    3   4   5   6   ...

HF

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

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

    if (n <= 2) {
        cout << 1 << endl;
    }
    else {
        int a = 1, b = 1;

        for (int i = 3; i <= n; i++) {
            int c = a + b;
            a = b;
            b = c;
        }

        cout << b;
    }

    return 0;
}

Feladat: adott n esetén írjuk ki a sorozat első n darab elemét!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

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

    if (n <= 1) {
        cout << 1 << endl;
    }
    else {
        int a = 1, b = 1;
        cout << 1 << " " << 1  << " ";

        for (int i = 3; i <= n; i++) {
            int c = a + b;
            a = b;
            b = c;
            cout << b << " ";
        }
    }

    return 0;
}

Fibonaccihoz hasonlóan megadott sorozatok

Adott a következő sorozat:

    S(1) = 5
    S(2) = 6
    S(n) = S(n-1) - 2*S(n-2)  bármely n >= 3

1. Adott egy n a bemeneten.

a) HF Írjuk ki a sorozat n-edik tagját!

b) HF Írjuk ki a sorozat első n tagját!

2. Adott a sorozat két egymás utáni tagja a bemeneten, írjuk ki az összes tagot ezektől visszafelé indulva!

Ötlet:

    S(n) = S(n-1) - 2*S(n-2)
    => S(n-2) = (S(n-1) - S(n)) / 2
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

int main()
{
    int x, y;
    cin >> x >> y;
    cout << y << " " << x << " ";

    while(x != 5) {
        int z = (x - y) / 2;
        y = x;
        x = z;
        cout << x << " ";
    }

    cout << endl;
    return 0;
}