Ismétlő feladatok

Ciklusok használata

1.

Írjuk ki 100-szor azt a szöveget, hogy “kenyelmetlen a billentyuzet”.

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

int main()
{
    int n = 100;

    for (int i = 1; i <= n; i++)
        cout << "kenyelmetlen a billentyuzet" << endl;


    cout << "--------------" << endl;

    // más megoldás:

    int i = 1;
    while (i <= n) {
        cout << "kenyelmetlen a billentyuzet" << endl;

        i++;
    }
    return 0;
}

2.

Írjunk ki az alábbi példákhoz hasonló háromszöget n sorral (n-t a felhasználó adja meg).

    Pl. n=5      n=3
    *****        ***
    ****         **
    ***          *
    **
    *
 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
#include <iostream>
using namespace std;

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

    /*
    for (int i = 1; i <= n; i++) {
        // n-i+1 darab *-ot kell kiírni

        for (int j = 1; j <= n-i+1; j++)
            cout << "*";
        cout << endl;
    }
    */

    // VAGY:
    
    for (int i = n; i >= 1; i--) {
        // i darab *-ot kell kiírni

        for (int j = 1; j <= i; j++)
            cout << "*";
        cout << endl;
    }

    return 0;
}

3.

Beolvasunk egy n természetes számot, számoljunk el n-ig kettesével (a páros számokat írjuk csak ki).

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

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

    for (int i = 2; i <= n; i+=2)
        cout << i << " ";


    cout << endl;
    return 0;
}

4.

Adott egy n term. szám, írjuk ki:

a) hány osztója van

b) mennyi a páratlan osztók összege

c) prímszám, összetett szám vagy egyik sem?

 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
33
#include <iostream>
using namespace std;

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

    int hany_oszto = 0;
    int osszeg = 0;

    for (int i = 1; i <= n; i++)
        if (n % i == 0) {
            hany_oszto++;

            if (i % 2 != 0) {
                osszeg += i;
            }
        }

    cout << "osztok szama: " << hany_oszto << endl;
    cout << "ptlan osztok osszege: " << osszeg << endl;

    if (hany_oszto == 2)
        cout << "prim" << endl;
    else if (n <= 1)
        cout << "nem prim, nem is osszetett" << endl;
    else
        cout << "osszetett" << endl;

    cout << endl;
    return 0;
}

5.

Két szám ln.k.o-jának meghatározása.

(ld. tavalyi anyag)

Sorozatok

6.

Adott n, majd n darab term. szám. Határozzuk meg:

a) az összegüket

b) a páratlanok átlagát

c) hány olyan egymás melleti számpár van, amik relatív prímek (ln.k.o-juk 1)

d) milyen hosszú a leghosszabb, egymás melletti 0-kból álló rész?

    Pl.
        10
        1 2 3 4 6 0 0 9 0 4

    kimenet:
        a) 29
        b) 4.33
        c) 3
        d) 2
 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;

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

    int osszeg = 0;
    int paratlan_ossz = 0;
    int paratlan_db = 0;

    int elozo = 0;
    int hany_jo_par = 0;

    int akt_resz_hossz = 0;
    int maximum = 0;


    for (int i = 1; i <= n; i++) {
        int elem;
        cin >> elem;

        osszeg += elem;

        if (elem % 2 != 0) {
            paratlan_ossz += elem;
            paratlan_db++;
        }

        // lnko(elem, elozo) = ?
        int lnko = 0;
        for (int i = 1; i <= elem && i <= elozo; i++)
            if (elem%i == 0 && elozo % i == 0)
                lnko = i;

        if (lnko == 1)
            hany_jo_par++;

        elozo = elem;

        if (elem == 0) {
            akt_resz_hossz++;
        }
        else {
            if (maximum < akt_resz_hossz)
                maximum = akt_resz_hossz;

            akt_resz_hossz = 0;
        }
    }
    if (maximum < akt_resz_hossz)
        maximum = akt_resz_hossz;

    cout << "osszeg: " << osszeg << endl;
    cout << "paratlanok atlaga: "
         << (double) paratlan_ossz / paratlan_db << endl;
    cout << "rel. prim parok: " << hany_jo_par << endl;
    cout << "leghosszabb 0-s resz hossza: " << maximum << endl;


    return 0;
}

7.

Beolvasunk egy n term. számot! Tekintsük azt a sorozatot, aminek az első két tagja

    f(1) = 1,
    f(2) = 2,

a többit pedig az

    f(n) = f(n-1) + 3*f(n-2)   (bármely n >= 3)

képlet adja meg.

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

b) Írjuk ki a sorozat első n tagját visszafelé.

    Pl. n = 5

        a) 1 2 5 11 26
        b) 26 11 5 2 1
 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
using namespace std;

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

    if (n == 1) {
        cout << "a) " << 1 << endl;
        cout << "b) " << 1 << endl;

    }
    else if (n == 2) {
        cout << "a) " << 1 << " " << 2 << endl;
        cout << "b) " << 2 << " " << 1 << endl;
    }
    else { // n >= 3
        cout << "a) " << 1 << " " << 2 << " ";

        // f(n) = f(n-1) + 3*f(n-2)
        // 3*f(n-2)+f(n-1) = f(n)
        int x = 1,  y = 2;

        for (int i = 3; i <= n; i++) {
            int uj = y + 3*x;
            cout << uj << " ";

            x = y;
            y = uj;
        }
        cout << endl;

        cout << "b) " << y << " " << x << " ";

        // f(n) = f(n-1) + 3*f(n-2)
        // f(n-2) = (f(n) - f(n-1)) / 3
        while (x != 1) {
            int uj = (y - x) / 3;
            cout << uj << " ";

            y = x;
            x = uj;
        }
        cout << endl;
    }

    return 0;
}

Számjegyek feldolgozása

8.

Adott egy n term szám, írjuk ki a tükörképét!

    Pl. n = 123-ra az eredmény 321
    Pl. n = 120-ra az eredmény 21

HF.

9.

Adott egy n term szám, írjuk ki azt a számot, ami csak a páratlan számjegyeit tartalmazza fordított sorrendben.

    Pl. n = 123-ra az eredmény 31

HF.

10.

Adott egy n term szám, írjuk ki azt a számot, ami csak a páratlan számjegyeit tartalmazza eredeti sorrendben.

    Pl. n = 123-ra az eredmény 13

HF.

11.

Számítsuk ki adott számban a számjegyek összegét!

    Pl. n = 123-ra az eredmény 6
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

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

    int osszeg = 0;

    while (n != 0)
    {
        int ut_szj = n%10;
        osszeg += ut_szj;

        n = n / 10;
    }

    cout << osszeg << endl;
    return 0;
}

Hogy lenne ugyanez szorzattal?

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

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

    int szorzat = 1;

    do
    {
        int ut_szj = n%10;
        szorzat *= ut_szj;

        n = n / 10;
    }
    while (n != 0);

    cout << szorzat << endl;
    return 0;
}