Anyag
- általános algoritmusok:
- számjegyekre bontás
- oszthatóság/prímek
- min-, max-keresés
- tömbök:
- beolvasás, kiírás
- törlés, beszúrás
- szekvenciális és
bináris keresés
- rendezés
- frekvenciatömbök használata
- mátrixok:
- beolvasás kiírás
- bejárások
- sor/oszlop törlés
és beszúrás
- főátló és mellékátló fogalma
- generálások
Segédeszközként használható 1 db A4-es lap (mindkét oldala)
legalább 10pt-os betűmérettel írva (vagy kézzel).
Tétel, megoldások
2 pont jár hivatalból, a 9 pontnyi feladatból 8-at kell még begyűjteni.
Munkaidő: 45 perc.
1.
Az input.txt fájlban adott n (n≤100), majd n darab pozitív egész, melyeket egy tömbbe kell beolvasni.
a. Írjuk ki a megjelenésük fordított sorrendjében azokat az elemeket, amik relatív prímek az első elemmel! – 1p
b. Töröljük ki az összes prím elemet! – 1p
c. Írjuk ki a megmaradt páratlan számokat csökkenő sorrendben (használható másik tömb a rendezéshez)! – 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
62
63
64
65
66
67
68
69
70
71
72
| #include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("input.txt");
int n;
fin >> n;
int t[100];
for (int i = 0; i < n; i++)
fin >> t[i];
// a)
for (int i = n-1; i >= 0; i--) {
// lnko(t[i], t[0]) == 1 ?
int lnko = 1;
for (int j = 2; j <= t[i] && j <= t[0];
j++)
{
if (t[i] % j == 0 && t[0] % j == 0)
lnko = j;
}
if (lnko == 1)
cout << t[i] << " ";
}
cout << endl;
// b)
int i = 0;
while (i < n) {
int db = 0;
for (int j = 1; j <= t[i]; j++)
if (t[i] % j == 0)
db++;
if (db == 2) {
for (int j = i; j <= n-2; j++)
t[j] = t[j+1];
n--;
}
else
i++;
}
for (int i = 0; i < n; i++)
cout << t[i] << " ";
cout << endl;
// c)
// rendezés csökk.
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++)
if (t[i] % 2 != 0)
cout << t[i] << " ";
cout << endl;
return 0;
}
|
2.
Az input.txt fájlban adott n (n≤109), majd egy n elemű 100-nál nem nagyobb pozitív egészekből álló sorozat.
a. Hány olyan eleme van, ami pontosan kétszer jelenik meg? – 1p
b. Melyik a legkisebb kétjegyű szám, ami nem jelenik meg? (Ha mind megvan, akkor írjuk ki, hogy „no chemistry”!) – 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
| #include <iostream>
#include <fstream>
using namespace std;
int main()
{
/*
ofstream fout("input.txt");
fout << 90 << endl;
for (int i = 10; i <= 99; i++)
fout << i << " ";
fout << endl;
return 0;
*/
ifstream fin("input.txt");
int n;
fin >> n;
int f[101] = {};
for (int i = 0; i < n; i++) {
int ertek;
fin >> ertek;
f[ertek]++;
}
// a)
int db = 0;
for (int ertek = 1; ertek <= 100; ertek++)
if (f[ertek] == 2)
db++;
cout << db << endl;
// b)
int elso = -1;
for (int ertek = 10; ertek <= 99; ertek++)
if (f[ertek] == 0 && elso == -1)
elso = ertek;
if (elso == -1)
cout << "no chemistry" << endl;
else
cout << elso << endl;
return 0;
}
|
3.
Az input.txt fájlban adott n (n≤100), majd egy n x n-es négyzetes mátrix elemei.
a. Írjuk ki azt az oszlopot, ahol a legnagyobb az elemek összege (holtverseny esetén az elsőt). – 1p
b. Számítsuk ki a mellékátlón található páros számok számtani középarányosát! – 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
62
63
| #include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int main()
{
ifstream fin("input.txt");
int n;
fin >> n;
int t[100][100];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
fin >> t[i][j];
// a)
int maximum = INT_MIN;
int max_index = -1;
for (int j = 0; j < n; j++) {
int s = 0;
for (int i = 0; i < n; i++)
s += t[i][j];
if (s > maximum) {
maximum = s;
max_index = j;
}
}
for (int i = 0; i < n; i++)
cout << t[i][max_index] << " ";
cout << endl;
// b)
int osszeg = 0;
int db = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (i+j == n-1 && t[i][j] % 2 == 0) {
osszeg += t[i][j];
db++;
}
/*
for (int i = 0; i < n; i++)
if (t[i][n-1-i] % 2 == 0) {
osszeg += t[i][n-1-i];
db++;
}
*/
cout << (double) osszeg / 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 1p
a. 8 6 4 2 0
9 7 5 3 1
10 8 6 4 2
11 9 7 5 3
12 10 8 6 4
b. 1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
Megoldások:
a.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include <iostream>
using namespace std;
int main()
{
int matrix[5][5];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
matrix[i][j] = i - 2*j + 8;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
return 0;
}
|
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
27
28
29
30
31
32
33
34
| #include <iostream>
using namespace std;
int main()
{
int matrix[5][6];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 6; j++) {
int d1 = i - 0;
int d2 = 5-1 - i;
int d3 = j - 0;
int d4 = 6-1 - j;
int minimum = d1;
if (d2 < minimum)
minimum = d2;
if (d3 < minimum)
minimum = d3;
if (d4 < minimum)
minimum = d4;
matrix[i][j] = minimum+1;
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 6; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
return 0;
}
|