Felmérő ismétlésből (ciklusok)

2 pont hivatalból, a munkaidő 45 perc.

1. feladat

Megfelelő ciklusok használatával írjuk ki a következő számsorozatokat (n-t a billentyűzetről olvassuk be, elég kódrészletet írni).

a) 1, 2, 3, ..., n (0.5 pont)

Megoldás:

1
2
3
4
for (int i = 1; i <= n; i++)
    cout << i << " ";
    
cout << endl;
b) 2, 4, 6, ..., 2n (0.5 pont)

Megoldás:

1
2
3
4
for (int i = 1; i <= n; i++)
    cout << 2*i << " ";

cout << endl;
c) 1, 3, 9, 27, 81, ..., 3^(n-1) (3 az (n-1). hatványon) (1 pont)

Megoldás:

1
2
3
for (int i = 0; i < n; i++)
    cout << pow(3, i) << " ";
cout << endl;

vagy:

1
2
3
4
5
6
7
int hatvany = 1;
for (int i = 0; i < n; i++) {
    cout << hatvany << " ";
    hatvany = hatvany*3;
}

cout << endl;

2. feladat

Mit ír ki az n = 12345 bemenetre az alábbi algoritmus? Kövessük nyomon! (1 pont)

    beolvas n
    Amíg n > 0
    |   kiír n % 10
    |
    |   Ha n % 2 = 0 akkor n <- n / 2
    |   különben n <- [n/10]
    |
    |   kiír n+1
    []

Megoldás:

    --+--------------------------------------
    n | 12345 1234 617 61 6 3 0
    --+--------------------------------------
Kimenet: 5 1235 4 618 7 62 1 7 6 4 3 1

3. feladat

Írjuk át úgy, hogy ne változzon a viselkedése!

a) for-ról while-ra:

1
2
for (int i = 2; i < 100; i += 3)
    cout << i;

Megoldás:

1
2
3
4
5
int i = 2;
while (i < 100) {
    cout << i;
    i += 3;
}

b) while-ról do-while-ra:

1
2
3
4
while (n > 0) {
    n -= 5;
    cout << n;
}

Megoldás:

1
2
3
4
5
6
if (n > 0) {
    do {
        n -= 5;
        cout << n;
    } while (n > 0);
}

c) do-while-ról while-ra:

1
2
3
4
do {
    cout << n;
    n /= 10;
} while (n > 9);

Megoldás:

1
2
3
4
5
6
cout << n;
n /= 10;
while (n > 9) {
    cout << n;
    n /= 10;
}

4. feladat

Beolvasunk egy n pozitív egész számot. Írjuk ki, hogy hány prím osztója van! (1 pont)

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

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

    int primosztok = 0;

    for (int i = 2; i <= n; i++) {
        // i osztó-e?
        if (n % i == 0) {
            // i prím-e?
            int db = 0;
            for (int j = 1; j <= i; j++)
                if (i % j == 0)
                    db++;

            if (db == 2)
                primosztok++;
        }
    }

    cout << primosztok << endl;
    return 0;
}

5. feladat

Beolvassuk az a és b pozitív egészeket. Írjuk ki:

  1. a legkisebb közös többszörösüket; (0.5 pont)
  2. a közös osztóikat. (0.5 pont)

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

int main()
{
    int a, b;
    cin >> a >> b;

    // a)
    int tobbszoros = a;
    while (tobbszoros % b != 0)
        tobbszoros += a;

    cout << tobbszoros << endl;

    // b)
    for (int i = 1; i <= a && i <= b; i++)
        if (a % i == 0 && b % i == 0)
            cout << i << " ";
    cout << endl;

    return 0;
}