Ismétlő felmérő feladatainak megoldása

1.

Az input.txt fájlban adott n (n≤100), majd n darab pozitív egész.

  1. Olvassuk be, tároljuk egy tömbben!
  2. Rendezzük csökkenő sorrendbe!
  3. Töröljük ki a prímeket!
  4. Írjuk ki jobbról balra haladva minden második elemét!
 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
#include <iostream>
#include <fstream>
using namespace std;

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

    // a)

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

    // b)

    for (int i = 0; i < n; i++)
        for (int j = i+1; j < n; j++)
            if (t[i] < t[j]) {
                int temp = t[i];
                t[i] = t[j];
                t[j] = temp;
            }

    for (int i = 0; i < n; i++)
        cout << t[i] << " ";
    cout << endl;

    // c)

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

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

        if (hany_oszto == 2) {
            for (int j = i; j <= n-2; j++)
                t[j] = t[j+1];

            n--;
            i--;
        }
    }

    for (int i = 0; i < n; i++)
        cout << t[i] << " ";
    cout << endl;

    // d)

    for(int i = n-2; i >= 0; i-=2)
        cout<<t[i] << " ";
    cout << endl;

    return 0;
}

2.

Az input.txt fájlban adott n, n≤pow(10,9), majd egy n elemű 100-nál nem nagyobb pozitív egészekből álló sorozat.

  1. Olvassuk be, tároljuk megfelelően!
  2. Hány olyan eleme van, ami nem ismétlődik?
  3. Írjuk ki csökkenő sorrendben a 10-zel osztható elemeket!
 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("input.txt");

    // a)

    int n, t[101] = {};

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

    // b)

    int db = 0;

    for (int ertek = 0; ertek <= 100; ertek++)
        if (t[ertek] == 1)
            db++;

    cout << db << endl;

    // c)

    for (int ertek = 100; ertek >= 0; ertek-=10)
        for (int i = 0; i < t[ertek]; i++)
            cout << ertek << " ";

    cout << endl;
    return 0;
}

3.

Az input.txt fájlban adott n (n≤100), majd egy n x n-es négyzetes mátrix elemei.

  1. Olvassuk be és tároljuk az elemeket!
  2. Írjuk ki azt az oszlopot, ahol a legkisebb az elemek szorzata (holtverseny esetén a jobb oldalit)!
  3. Számítsuk ki a mellékátlón található elemek átlagát!
 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
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;

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

    // a)

    int n, t[100][100];

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

    // b)

    int min_szorzat = INT_MAX, j_min_szorzat = -1;

    for (int j = 0; j < n; j++) {
        int szorzat = 1;
        for (int i = 0; i < n; i++)
            szorzat *= t[i][j];

        if (szorzat <= min_szorzat) {
            min_szorzat = szorzat;
            j_min_szorzat = j;
        }
    }

    for (int i = 0; i < n; i++) {
        cout << t[i][j_min_szorzat] << " ";
    }
    cout << endl;

    // c)

    int s = 0, db = 0;

    for (int i = 0; i < n; i++) {
        s += t[i][n-i-1];
        db++;
    }

    cout << (double) s / db << endl;
    return 0;
}

4.

Állítsuk elő az alábbi mátrixokat (megfelelő változódeklarációk és két egymásba ágyazott for ciklus segítségével)! Nem kell teljes programot írni, csak kódrészleteket. – 2 x 0.5 pont

a.

1 3 5 7 9
3 5 7 9 11
5 7 9 11 13
7 9 11 13 15
1
2
3
4
5
int a[4][5];

for (int i = 0; i < 4; i++)
    for (int j = 0; j < 5; j++)
        a[i][j] = 1 + 2*(i+j);

b.

1 1 1 1 1 1
2 2 2 2 2 1
3 3 3 3 2 1
4 4 4 3 2 1
5 5 4 3 2 1
1
2
3
4
5
6
7
8
int a[5][6];

for (int i = 0; i < 5; i++)
    for (int j = 0; j < 6; j++)
        if (i + 1 < 6-j)
            a[i][j] = i+1;
        else 
            a[i][j] = 6-j;

5.

Adottak az n, m változók, illetve a t mátrix benne n x m elemmel. Írjunk kódrészletet, amely átrendezi az oszlopokat az elemek összege szerinti növekvő sorrendbe! (Deklaráljuk a segédváltozókat, beolvasni és kiírni nem kell.)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
int osszegek[100] = {};

for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        osszegek[j] += t[i][j];

for (int j1 = 0; j1 < m; j1++)
    for (int j2 = j1+1; j2 < m; j2++)
        if (osszegek[j1] > osszegek[j2]) {
            // oszlopcsere
            for (int i = 0; i < n; i++) {
                int temp = t[i][j1];
                t[i][j1] = t[i][j2];
                t[i][j2] = temp;
            }

            // megfelelő csere az osszegek tömbben
            int temp = osszegek[j1];
            osszegek[j1] = osszegek[j2];
            osszegek[j2] = temp;
        }