Megoldások - 2024. július

II.1.d

    beolvas n  (nem nulla természetes szám)
    p <- 1
    i <- 1
    ┌amíg i <= n végezd el
    │ beolvas x   (természetes szám)
    │┌ismételd
    ││ x <- [x/3]
    │└ameddig x≤3
    │┌ha x≠0 akkor
    ││ p <- p*x
    │└■
    │ i <- i + 1
    └■
    kiír p

II.3

1
2
3
4
5
6
for(i=0;i<9;i++)
    for(j=0;j<9;j++)
        if (i+j < 4 || i+j > 12)
            a[i][j] = 4;
        else
            a[i][j] = 2;

III.1.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
int majImp(int a, int b)
{
    for (int i = a; i <= b; i++) {
        int s_paratlan = 0;
        int s_paros = 0;

        for (int d = 2; d < i; d++)
            if (i % d == 0) {
                if (d % 2 == 0)
                    s_paros += d;
                else
                    s_paratlan += d;
            }
        if (s_paratlan > s_paros)
            return i;
    }

    return 0;
}

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

int main()
{
    char s[101];
    cin.getline(s, 101);

    char *p = strtok(s, " ");

    bool ok = true;

    int hossz = strlen(p);
    p = strtok(NULL, " ");

    while (p != NULL) {

        if (strlen(p) != hossz)
            ok = false;

        p = strtok(NULL, " ");
    }

    if (ok)
        cout << "DA " << hossz << endl;
    else
        cout << "NU" << endl;

    return 0;
}

III.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
31
32
33
34
35
36
37
38
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream be("bac.in");
    int elozo,akt;
    be>>elozo;
    int maximalis=0,aktualis=0,szam=0,joszam=0;
    while(be>>akt){
        if(akt==elozo+1){
            aktualis++;
            szam=akt;
        }
        else{
            if(aktualis>maximalis){
                maximalis=aktualis;
                joszam=szam;

            }
            aktualis=0;
        }
        elozo=akt;
    }
    if(aktualis>maximalis){
        maximalis=aktualis;
        joszam=szam;
    }
    if(maximalis==0) cout<<"nu exista";
    else{
        for(int i=0;i<=maximalis;i++){
            cout<<joszam-maximalis<<" ";
            joszam++;
        }
    }
    return 0;
}

Az algoritmus beolvassa a sorozat elemeit, követi az aktuális lépcső hosszát (leszámítva az első elemet). A lépcsőhoszzok közül maximumot keresünk és megjegyezzük azt, is, hogy melyik volt az adott lépcső utolsó eleme. A végén egy ciklussal ki tudjuk írni az összes elemét a leghosszabb lépcsőnek, mert ismerjük az utolsót és a hosszát.

Az alg. hatékony idő szempontjából, mert egyszer halad végig a sorozat elemein, mindegyik esetén konstans számú lépést végez. Memória szempontjából azért hatékony, mert nem tárolja a sorozatot, csak konstans mennyiségű memóriát használ.