Feladatok tömbökkel

1.

Adott n elemű sorozat (n < 100). Mennyi az első és utolsó páros elem között található elemek összege? (Feltéve, hogy van legalább egy páros elem benne.)

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

int main()
{
    ifstream be("input.txt");

    int t[100];
    int n;

    be >> n;
    for (int i = 0; i < n; i++)
        be >> t[i];

    // hol az első páros?  (fordított végigjárással)
    /*
    int poz_elso_paros = -1;

    for (int i = n-1; i >= 0; i--)
        if (t[i] % 2 == 0)
            poz_elso_paros = i;
    */

    // hol az első páros? (másképp, plusz feltétellel)
    int poz_elso_paros = -1;

    for (int i = 0; i < n; i++)
        if (t[i] % 2 == 0 && poz_elso_paros == -1)
            poz_elso_paros = i;

    // hol az utolsó páros
    int poz_utolso_paros = -1;

    for (int i = 0; i < n; i++)
        if (t[i] % 2 == 0)
            poz_utolso_paros = i;

    // mennyi köztük az összeg?
    int osszeg = 0;
    
    for (int i = poz_elso_paros+1; i < poz_utolso_paros; i++)
        osszeg = osszeg + t[i];

    cout << osszeg << endl;

    return 0;
}

HF: Kövessük nyomon a fentebbi kódot az alábbi bemenetekre:

    a.
        7
        11 20 6 5 8 7 2
    b.
        6
        1 5 6 4 7 9
    c.
        6
        1 5 3 4 7 9

2.

Adott n elemű sorozat (n < 100). Minden elem esetén írjuk ki, hogy hány nála kisebb elem található a sorozatban.

Ötlet: két for-t használunk egymásban, minden elem esetén végigmegyünk újra a tömbön, és megszámoljuk, hogy hány nála kisebb elem van.

    for (i ...) {
        int db = 0;
        for (j ...)
            if (...)
                db++;
        cout << t[i] << ": " << db << endl;
    }

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 n;
    cin >> n;

    int t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    for (int i = 0; i < n; i++) {
        int db = 0;
        for (int j = 0; j < n; j++) {
            if (t[j] < t[i])
                db++;
        }
        cout << t[i] << ": " << db << endl;
    }

    return 0;
}

3. HF

Adott n elemű sorozat. Minden elem esetén írjuk ki, hogy hány nála nagyobb prímszám található a sorozatban.

 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 t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    for (int i = 0; i < n; i++) {
        int db = 0;
        for (int j = 0; j < n; j++) {
            if (t[j] > t[i]) {
                // megnézzük, hogy t[j] prímszám-e
                int hany_oszto = 0;

                for (int k = 1; k <= t[j]; k++)
                    if (t[j] % k == 0)
                        hany_oszto++;

                if (hany_oszto == 2)
                    db++;
            }
        }
        cout << t[i] << ": " << db << endl;
    }

    return 0;
}

4.

Adott n elemű sorozat. Gyűjtsük össze egy tömbbe azokat az elemeket, amelyek prímek, majd írjuk ki ezeket a megjelenésük fordított sorrendjében.

Példa:

    bemenet:  7
              1 4 2 6 7 11 7

    új tömb: 2 7 11 7
    kimenet: 7 11 7 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
#include <iostream>
using namespace std;

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

    int t[100];
    for (int i = 0; i < n; i++)
        cin >> t[i];


    int n_uj = 0;
    int uj[100];

    for (int i = 0; i < n; i++) {

        int db = 0;
        for (int d = 1; d <= t[i]; d++)
            if (t[i] % d == 0)
                db++;

        if (db == 2) {  /* t[i] prím? */
            uj[n_uj] = t[i];
            n_uj++;
        }
    }

    for (int i = n_uj-1; i >= 0; i--)
        cout << uj[i] << " ";
    cout << endl;
    return 0;
}

5.

Adott n és az A1, A2, … An pontok korrdinátái (pontonként két-két valós szám). Írjuk ki annak a két pontnak a sorszámát, amelyek legközelebb vannak egymáshoz.

Példa bemenetre:

     3
     1  2
     3  4
    -2  5
 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 <cmath>
using namespace std;

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

    int x[100];
    int y[100];

    for (int i = 0; i < n; i++)
        cin >> x[i] >> y[i];

    double minimum = INT_MAX;
    int hol_i, hol_j;

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (i != j) {
                double dx = x[i] - x[j];
                double dy = y[i] - y[j];
                double tav = sqrt(dx*dx + dy*dy);

                // minimumkeresés
                if (tav < minimum) {
                    minimum = tav;
                    hol_i = i;
                    hol_j = j;
                }
            }

    cout << "(" << x[hol_i] << "," << y[hol_i] << ") es ("
         << x[hol_j] << "," << y[hol_j] << ")" << endl;

    return 0;
}

6. HF

Írjuk ki egy tömb azon elemeit, amelyek többszörösei az utolsó elemnek!
https://www.pbinfo.ro/probleme/546/afisare0

 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;
    cin >> n;

    int tomb[1000];

    for (int i = 0; i < n; i++)
        cin >> tomb[i];

    for (int i = 0; i < n; i++) {
        // többszöröse-e az utolsónak?
        if (tomb[i] % tomb[n-1] == 0) {
            cout << tomb[i] << " ";
        }
    }

    cout << endl;
    return 0;
}

7.

Adott egy n elemű tömb. Írjuk ki a páros indexen levő elemeket az indexek növekvő sorrendjében, majd a páratlan indexen levő elemeket az indexek csökkenő sorrendjében! Az elemek 1-től sorszámozottak.
https://www.pbinfo.ro/probleme/488/afisare

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

int main()
{
    int a[1001];
    int n;

    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];

    /*
    for (int i = 1; i <= n; i++)
        if (i % 2 == 0)
            cout << a[i] << " ";
    cout << endl;


    for (int i = n; i >= 1; i--)
        if (i % 2 == 1)
            cout << a[i] << " ";
    cout << endl;
    */
    // VAGY:

    for (int i = 2; i <= n; i+=2)
        cout << a[i] << " ";
    cout << endl;

    int imax = n;
    if (imax % 2 == 0)
        imax--;

    for (int i = imax; i >= 1; i-=2)
        cout << a[i] << " ";
    cout << endl;

    return 0;
}

8.

Adott egy n elemű tömb. Írjuk ki az elemeit a következő sorrendben: első, utolsó, második, utolsó előtti stb.
https://www.pbinfo.ro/probleme/489/afisare1

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

int main()
{
    int a[1000];
    int n;

    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> a[i];

    /*
    for (int i = 0; i < n/2; i++)
        cout << a[i] << " " << a[n-i-1] << " ";

    if (n % 2 == 1)
        cout << a[n/2];

    cout << endl;
    */
    // VAGY:

    int i = 0, j = n-1;

    while (i <= j) {
        cout << a[i] << " ";
        if (j != i)
            cout << a[j] << " ";

        i++;
        j--;
    }

    cout << endl;
    return 0;
}

9. HF

Adott egy n elemű különböző értékeket tartalmazó tömb. Meg kell határozni a legkisebb és legnagyobb elem (1-től sorszámozott) indexét.
https://www.pbinfo.ro/probleme/553/pozminmax

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

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

    int t[1001];
    for (int i = 1; i <= n; i++)
        cin >> t[i];

    int maximum = t[1];
    int max_helye = 1;

    int minimum = t[1];
    int min_helye = 1;

    for (int i = 2; i <= n; i++) {
        if (t[i] < minimum) {
            minimum = t[i];
            min_helye = i;
        }

        if (t[i] > maximum) {
            maximum = t[i];
            max_helye = i;
        }
    }

    cout << min_helye << " " << max_helye << endl;

    return 0;
}

Vagy:

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

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

    int t[1001];
    for (int i = 1; i <= n; i++)
        cin >> t[i];

    int maximum = INT_MIN;
    int max_helye;

    int minimum = INT_MAX;
    int min_helye;

    for (int i = 1; i <= n; i++) {
        if (t[i] < minimum) {
            minimum = t[i];
            min_helye = i;
        }

        if (t[i] > maximum) {
            maximum = t[i];
            max_helye = i;
        }
    }

    cout << min_helye << " " << max_helye << endl;

    return 0;
}

10. HF

Adott egy n elemű tömb. Meg kell határozni, hogy hány olyan eleme van, amely egyenlő a legnagyobb és legkisebb érték közötti különbséggel.
https://www.pbinfo.ro/probleme/547/numarare6

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

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

    int t[1000];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    int maximum = t[0];
    int minimum = t[0];

    for (int i = 1; i < n; i++) {
        if (t[i] < minimum)
            minimum = t[i];

        if (t[i] > maximum)
            maximum = t[i];
    }

    //cout << minimum << " " << maximum << endl;

    int kulonbseg = maximum - minimum;

    int hany = 0;

    for (int i = 0; i < n; i++)
        if (t[i] == kulonbseg)
            hany++;

    cout << hany << endl;

    return 0;
}

11.

Adott egy n elemű tömb. Meg kell határozni, hogy hány olyan elempár alkotható az elemeiből, amelynek mindkét tagjában ugyanaz a tízesek számjegye.
https://www.pbinfo.ro/probleme/4380/numarareperechi1

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

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

    int t[200];
    for (int i = 0; i < n; i++)
        cin >> t[i];

    int db = 0;

    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            int szj1 = t[i] / 10 % 10;
            int szj2 = t[j] / 10 % 10;

            if (szj1 == szj2)
                db++;
        }
    }

    cout << db << endl;

    return 0;
}