Felmérő: ciklusok, oszthatóság

Felmérő lesz 2026. február 11-én, szerdán, az alábbiakból:

Tétel

Hivatalból 2 pont jár, a munkaidő 45 perc.

A változat

1.

Adott az alábbi C++ program:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
    int n; 
    cin >> n;
    int x = 1;
    while (n >= 6) {
        if (n % 5 == 0) {
            cout << x << " ";
        }
        else {
            x = x+2;
        }
        n--;
    }
    cout << endl; return 0; 
}
  1. Kövessük nyomon a végrehajtást, ha a bemenete a 16-os szám! Mi kerül a kimenetre? (1p)
  2. Írjuk át a while ciklust do-while ciklussá úgy, hogy a program viselkedése ne változzon! (Le kell írni a teljes programot.) (1p)
  3. Írjuk át a while ciklust for ciklussá úgy, hogy a program viselkedése ne változzon! (Le kell írni a teljes programot.) (1p)
  4. (opcionális, +0.67pont) Melyek azon n értékek, amelyekre a program 67 darab számot ír ki?

2.

Adott x és y pozitív egész számoknak határozzuk meg a legnagyobb közös osztóját és legkisebb közös többszörösét! (1p)

Megoldás:

 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 a, b;
    cin >> a >> b;

    int szorzat = a * b;

    while (a != b) {
        if (a > b)
            a -= b;
        else
            b -= a;
    }

    cout << "lnko: " << a << endl;
    cout << "lkkt: " << szorzat / a << endl;

    return 0;
}

3.

Adott egy egynél nagyobb pozitív egész szám. Ha prím, akkor írjuk ki a „nem tetszik” üzenetet, különben határozzuk meg a legkisebb és legnagyobb valódi osztójának összegét! (1p)

Megoldás:

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

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

    int hany = 0;
    int legkisebb = 0;
    int legnagyobb = 0;

    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            hany++;

            if (legkisebb == 0) {
                legkisebb = i;
            }

            legnagyobb = i;
        }
    }

    if (hany == 0)
        cout << "nem tetszik" << endl;
    else
        cout << legkisebb + legnagyobb << endl;

    return 0;
}

4.

A bemeneten adott az n pozitív egész szám (n ≤ 106).

  1. Írjuk ki a prímtényezőit szóközzel elválasztva! (1p)
  2. Számítsuk ki a páros hatványon megjelenő prímtényezőinek összegét! (1p)

Példa: n = 300-ra a kimenet:

    2 3 5 
    7

Megoldás:

 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>
using namespace std;

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

    int d = 2;
    int osszeg = 0;

    while (n > 1) {
        int hatvany = 0;

        while (n % d == 0) {
            n = n / d;
            hatvany++;
        }

        if (hatvany >= 1) {
            cout << d << " ";
            if (hatvany % 2 == 0)
                osszeg = osszeg + d;
        }

        d++;
    }

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

5.

Adott n pozitív egész szám esetén állítsuk elő az alábbi n soros kimenetet! (1p)

    1 
    1 2
    1 2 3 
    1 2 3 4
    ...
    1 2 3 4 5 ... n

Megoldás:

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

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

    for (int sor = 1; sor <= n; sor++) {
        for (int oszlop = 1; oszlop <= sor; oszlop++)
            cout << oszlop << " ";
        cout << endl;
    }

    return 0;
}

B változat

1.

Adott az alábbi C++ program:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
    int n; 
    cin >> n;
    int x = 1;
    while (n >= 8) {
        if (n % 7 == 0) {
            cout << x << " ";
        }
        else {
            x = x+1;
        }
        n--;
    }
    cout << endl; return 0; 
}
  1. Kövessük nyomon a végrehajtást, ha a bemenete a 22-es szám! Mi kerül a kimenetre? (1p)
  2. Írjuk át a while ciklust do-while ciklussá úgy, hogy a program viselkedése ne változzon! (Le kell írni a teljes programot.) (1p)
  3. Írjuk át a while ciklust for ciklussá úgy, hogy a program viselkedése ne változzon! (Le kell írni a teljes programot.) (1p)
  4. (opcionális, +0.67pont) Melyek azon n értékek, amelyekre a program 67 darab számot ír ki?

Megoldás - b:

 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 x = 1;

    if (n >= 8) {
        do {
            if (n % 7 == 0) {
                cout << x << " ";
            }
            else {
                x = x+1;
            }
            n--;
        } while (n >= 8);
    }

    cout << endl; return 0;
}

Megoldás - c:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int x = 1;
    while (n >= 8) {
        if (n % 7 == 0) {
            cout << x << " ";
        }
        else {
            x = x+1;
        }
        n--;
    }
    cout << endl; return 0;
}

Más megoldás - c:

 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 n;
    cin >> n;
    int x = 1;
    for (int i = n; i >= 8; i--)
    {
        if (i % 7 == 0) {
            cout << x << " ";
        }
        else {
            x = x+1;
        }

    }
    cout << endl; return 0;
}

Megint más megoldás - c:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int x = 1;
    for (; n >= 8; n--) {
        if (n % 7 == 0) {
            cout << x << " ";
        }
        else {
            x = x+1;
        }
    }
    cout << endl; return 0;
}

2.

Adott egy egynél nagyobb pozitív egész szám. Ha prím, akkor írjuk ki a „baj van” üzenetet, különben határozzuk meg a legkisebb és legnagyobb valódi osztójának szorzatát! (1p)

3.

Adott x és y pozitív egész számoknak határozzuk meg a legnagyobb közös osztóját és legkisebb közös többszörösét! (1p)

4.

A bemeneten adott az n pozitív egész szám (n ≤ 106).

  1. Írjuk ki a prímtényezőit szóközzel elválasztva! (1p)
  2. Számítsuk ki a páratlan hatványon megjelenő prímtényezőinek összegét! (1p)

Példa: n = 90-re a kimenet:

    2 3 5 
    7

5.

Adott n pozitív egész szám esetén állítsuk elő az alábbi n soros kimenetet! (1p)

    1 
    2 1
    3 2 1 
    4 3 2 1
    ...
    n n-1 ... 3 2 1

Megoldás:

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

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

    for (int sor = 1; sor <= n; sor++) {
        for (int oszlop = sor; oszlop >= 1; oszlop--)
            cout << oszlop << " ";
        cout << endl;
    }

    return 0;
}