Megoldások - 2019. aug.

III.1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int MaxImp(int a, int b)
{
    int eredmeny = 0;

    for (int x = a; x <= b; x++) {
        int szorzat = 1;

        for (int d = 3; d <= x; d+=2)
            if (x % d == 0)
                szorzat *= d;

        if (szorzat > x)
            eredmeny = x;
    }

    return eredmeny;
}

Vagy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int MaxImp(int a, int b)
{
    int eredmeny = 0;

    for (int x = b; x >= a; x--) {
        int szorzat = 1;

        for (int d = 3; d <= x; d+=2)
            if (x % d == 0)
                szorzat *= d;

        if (szorzat > x && eredmeny == 0)
            eredmeny = x;
    }

    return eredmeny;
}

Vagy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
int MaxImp(int a, int b)
{
    for (int x = b; x >= a; x--) {
        int szorzat = 1;

        for (int d = 3; d <= x; d+=2)
            if (x % d == 0)
                szorzat *= d;

        if (szorzat > x)
            return x;
    }

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

int main()
{
    int t[20][20];
    int n;

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

    int valasz = 1;

    for (int k = 2; k <= n; k++) {
        // a k x k méretű bal felső
        // négyzetet teszteljük

        bool jo = true;

        for (int i = 0; i < k; i++)
            for (int j = 0; j < k; j++)
                if (t[i][j] != t[0][0])
                    jo = false;

        if (jo)
            valasz = k;
    }

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

int main()
{
    int t[20][20];
    int n;

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

    int valasz = 1;
    bool jo = true;

    for (int k = 2; k <= n && jo; k++) {
        // a k x k méretű bal felső
        // négyzetet teszteljük

        for (int i = 0; i < k; i++)
            for (int j = 0; j < k; j++)
                if (t[i][j] != t[0][0])
                    jo = false;

        if (jo)
            valasz = k;
    }

    cout << valasz << 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
36
37
#include <iostream>
using namespace std;

int main()
{
    int t[20][20];
    int n;

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

    int valasz = 1;
    bool jo = true;

    for (int k = 2; k <= n && jo; k++) {
        // a k x k méretű bal felső
        // négyzetet teszteljük

        // [k-1] sor:
        for (int j = 0; j < k; j++)
            if (t[k-1][j] != t[0][0])
                jo = false;

        // [k-1] oszlop:
        for (int i = 0; i < k; i++)
            if (t[i][k-1] != t[0][0])
                jo = false;

        if (jo)
            valasz = k;
    }

    cout << valasz << endl;
    return 0;
}

III.3

b.

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

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

    int f[1001] = {};

    int x;
    while (be >> x)
        f[x]++;

    for (int i = 1; i <= 1000; i += 2)
        for (int j = 1; j <= f[i]; j++)
            cout << i << " ";


    for (int i = 0; i <= 1000; i += 2)
        for (int j = 1; j <= f[i]; j++)
            cout << i << " ";

    cout << endl;
    return 0;
}

a.

Az algoritmus frekvenciatömböt épít a beolvasott elemekből, majd végigjárja előbb a páratlan, aztán a páros értékeket a [0,1000] intervallumból és mindegyiket annyiszor írja ki, ahányszor az eredeti sorozatban megjelent.

Idő szempontjából azért hatékony, mert egyszer halad végig a sorozat elemein (mindegyikre konstans számú lépést végez el).