Felmérő ismétlésből

Felmérő lesz a 4. hét első óráján (jelelegi órarend szerint szept. 30, 8-9).

Anyag

Segédeszközként használható egy A4-es lap mindkét oldala legalább 10pt méretű betűvel írva (vagy kézzel).

Tétel

Munkaidő: 45 perc. Hivatalból 1 pont jár, helyes programszerkezet, indentálás és értelmes változónevek használatáért további 1 pont.

1.

Írjunk egy programot, ami beolvas egy n természetes számot, majd kiírja az alábbi sorozatok első n darab tagját a konzolablak egy-egy sorára):

a. 2, -2, 4, -4, 6, -6, … – 0.5p

b. 2, 5, 7, 12, 19, 31, 50, 81, … – 0.5p

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
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
64
65
66
67
68
69
70
71
72
#include <iostream>
using namespace std;


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

    // a) 2, -2, 4, -4, 6, -6

    /*
    int a = 2;
    int b = -2;

    if (n == 1) cout << 2 << endl;
    else if (n == 2) cout << "2 -2" << endl;
    else {
        cout << 2 << " " << -2 << " ";
        for (int i = 3; i <= n; i++) {
            int uj = a+2;
            if (a < 0)
                uj = a-2;
            cout << uj << " ";

            a = b;
            b = uj;
        }
        cout << endl;
    }
    */

    for (int i = 1; i <= n; i++)
        if (i % 2 == 0)
            cout << -i << " ";
        else
            cout << i+1 << " ";

    cout << endl;


    /*
    int tag = 2;

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

        if (tag > 0)
            tag = -tag;
        else
            tag = -tag+2;

    }
    cout << endl;
    */


    // b) 2 5 7 12 19 stb.  uj = elozo + azelotti

    int a = 2;
    int b = 5;

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

        int uj = a+b;
        a = b;
        b = uj;
    }

    return 0;
}

2.

Írjunk programot, ami beolvas egy n természetes számot, majd kiírja az alábbi sorozatok n-nél kisebb tagjait!

a. 1, 5, 25, 125, 625, … – 0.5p

b. 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, … – 0.5p

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;

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

    // a) 1 5 25 125 625 ....
    int szam = 1;
    while (szam < n) {
        cout << szam << " ";
        szam = szam * 5;
    }
    cout << endl;

    // 1 2 4 5 7 8 ...
    /*
    int szam = 1;
    while (szam < n) {
        cout << szam << " ";

        szam++;
        if (szam % 3 == 0)
            szam++;

    }
    */

    int szam = 1;
    int mennyit = 1;

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

        szam += mennyit;
        mennyit = 3 - mennyit;
        /*
        if (mennyit == 1)
            mennyit = 2;
        else
            mennyit = 1;
        */
    }
    cout << endl;

    return 0;
}

3.

Adottak az a és b pozitív egészek a bemeneten.

a. Írjuk ki, hogy hányadik hatványon jelenik meg a 2-es tényező a szorzatuk prímtényezős felbontásában! – 1p

b. Írjuk ki a legnagyobb közös prímosztójukat! – 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
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
#include <iostream>
using namespace std;

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

    // a)
    int szorzat = a*b;

    int kitevo = 0;
    while (szorzat % 2 == 0) {
        szorzat = szorzat / 2;
        kitevo++;
    }

    cout << kitevo << endl;


    // b)
    /*
    int legnagyobb = 0;

    for (int i = 1; i <= a && i <= b; i++)
        if (a%i == 0 && b%i == 0) {
            int db = 0;
            for (int x = 1; x <= i; x++)
                if (i%x == 0)
                    db++;

            if (db == 2)
                legnagyobb = i;
        }

    cout << legnagyobb << endl;
    */

    // b) ügyesebben
    int legnagyobb = 0;

    int d = 2;
    while (a > 1) {
        if (a % d == 0) {
            if (b%d == 0)
                legnagyobb = d;

            while (a%d == 0)
                a /= d;
        }

        d++;
    }

    cout << legnagyobb << endl;

    return 0;
}

4.

Adott egy n természetes szám. Írjuk ki az alábbiakat:

a. Mennyi a 3-nál nagyobb páratlan számjegyeinek az összege? – 0.5p

b. Hány olyan számjegye van, ami összetett szám? – 0.5p

c. Az X kétszeresét, ahol X jelöli azt a számot, melyet úgy kapunk, hogy előbb leírjuk n páros számjegyeit, majd a páratlanokat (mindkét esetben eredeti sorrendben). – 1p

Pl.    bemenet:    72345
       kimenet:    12
                   1
                   49470

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
using namespace std;

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

    int osszeg = 0;
    int db_osszetett = 0;

    int x = 0;
    int p = 1;

    int masik_n = n;

    while (n > 0) {
        int szj = n%10;

        if (szj > 3 && szj % 2 == 1)
            osszeg += szj;

        if (szj == 4 || szj == 6 || szj == 8 || szj == 9)
            db_osszetett++;

        if (szj % 2 == 1) {
            x = x + p*szj;
            p = p*10;
        }

        n = n/10;
    }

    while (masik_n != 0) {
        int szj = masik_n%10;
        if (szj % 2 == 0) {
            x = x + p*szj;
            p = p*10;
        }

        masik_n = masik_n/10;
    }

    // 72345
    // 24735 -> 49470

    cout << osszeg << endl;
    cout << db_osszetett << endl;

    cout << 2*x << endl;

    return 0;
}

5.

Beolvasunk pozitív egészekből álló sorozatot a konzolról, -1 jelzi majd a sorozat végét (és ez már nem tartozik hozzá)!

a. Írjuk ki a sorozat három legnagyobb elemét! – 1p

b. Milyen hosszú és hányadik elemnél kezdődik az a leghosszabb rész, ami olyan egymás melletti elemekből áll, amelyeknek ugyanannyi a 7-tel való osztási maradéka? – 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
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
#include <iostream>
using namespace std;

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

    int max1=-1,max2=-1,max3=-1;

    int elozo = -1;
    int hossz = 0;
    int start = -1;
    int poz = 1;

    int max_hossz = 0;
    int max_start = 0;

    while (szam != -1) {
        if (szam > max3) {
            max1 = max2;
            max2 = max3;
            max3 = szam;
        }
        else if (szam > max2) {
            max1 = max2;
            max2 = szam;
        }
        else if (szam > max1)
            max1 = szam;


        if (szam % 7 == elozo % 7) {
            hossz++;
        }
        else {
            if (hossz > max_hossz) {
                max_hossz = hossz;
                max_start = start;
            }

            hossz = 1;
            start = poz;
        }

        elozo = szam;
        poz++;
        cin >> szam;
    }

    if (hossz > max_hossz) {
        max_hossz = hossz;
        max_start = start;
    }

    cout << max1 << " " << max2 << " " << max3 << endl;

    cout << max_hossz << " " << max_start << endl;

    return 0;
}