Felmérő lesz a 4. hét első óráján (jelelegi órarend szerint szept. 30, 8-9).
Anyag
- C++ alapok, változók, kifejezések, elágazás, ciklusok, adattípusok
- pszeudokód (nyomonkövetés, átírás C++-ra, ciklusátírások)
- oszthatósággal kapcsolatos feladatok
- egyenletek megoldása, mértani feladatok
- sorozatok feldolgozása és előállítása (ld. Fibonacci), minimum/maximumkeresés,
megszámlálás, összegek és szorzatok
- szám számjegyeinek feldolgozása, szám építése számjegyekből
Segédeszközként használható egy A4-es lap mindkét oldala legalább 10pt méretű
betűvel írva (vagy kézzel).
Tétel
Munkaidő: 45 perc.
Hivatalból 1 pont jár, helyes programszerkezet, indentálás és értelmes változónevek
használatáért további 1 pont.
1.
Írjunk egy programot, ami beolvas egy n természetes számot, majd kiírja az alábbi sorozatok
első n darab tagját a konzolablak egy-egy sorára):
a. 2, -2, 4, -4, 6, -6, … – 0.5p
b. 2, 5, 7, 12, 19, 31, 50, 81, … – 0.5p
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>
using namespace std;
int main()
{
int n;
cin >> n;
// a) 2, -2, 4, -4, 6, -6
/*
int a = 2;
int b = -2;
if (n == 1) cout << 2 << endl;
else if (n == 2) cout << "2 -2" << endl;
else {
cout << 2 << " " << -2 << " ";
for (int i = 3; i <= n; i++) {
int uj = a+2;
if (a < 0)
uj = a-2;
cout << uj << " ";
a = b;
b = uj;
}
cout << endl;
}
*/
for (int i = 1; i <= n; i++)
if (i % 2 == 0)
cout << -i << " ";
else
cout << i+1 << " ";
cout << endl;
/*
int tag = 2;
for (int i = 1; i <= n; i++) {
cout << tag << " ";
if (tag > 0)
tag = -tag;
else
tag = -tag+2;
}
cout << endl;
*/
// b) 2 5 7 12 19 stb. uj = elozo + azelotti
int a = 2;
int b = 5;
for (int i = 1; i <= n; i++) {
cout << a << " ";
int uj = a+b;
a = b;
b = uj;
}
return 0;
}
|
2.
Írjunk programot, ami beolvas egy n természetes számot, majd kiírja az alábbi sorozatok
n-nél kisebb tagjait!
a. 1, 5, 25, 125, 625, … – 0.5p
b. 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, … – 0.5p
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
// a) 1 5 25 125 625 ....
int szam = 1;
while (szam < n) {
cout << szam << " ";
szam = szam * 5;
}
cout << endl;
// 1 2 4 5 7 8 ...
/*
int szam = 1;
while (szam < n) {
cout << szam << " ";
szam++;
if (szam % 3 == 0)
szam++;
}
*/
int szam = 1;
int mennyit = 1;
while (szam < n) {
cout << szam << " ";
szam += mennyit;
mennyit = 3 - mennyit;
/*
if (mennyit == 1)
mennyit = 2;
else
mennyit = 1;
*/
}
cout << endl;
return 0;
}
|
3.
Adottak az a és b pozitív egészek a bemeneten.
a. Írjuk ki, hogy hányadik hatványon jelenik meg a 2-es tényező a szorzatuk
prímtényezős felbontásában! – 1p
b. Írjuk ki a legnagyobb közös prímosztójukat! – 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
| #include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
// a)
int szorzat = a*b;
int kitevo = 0;
while (szorzat % 2 == 0) {
szorzat = szorzat / 2;
kitevo++;
}
cout << kitevo << endl;
// b)
/*
int legnagyobb = 0;
for (int i = 1; i <= a && i <= b; i++)
if (a%i == 0 && b%i == 0) {
int db = 0;
for (int x = 1; x <= i; x++)
if (i%x == 0)
db++;
if (db == 2)
legnagyobb = i;
}
cout << legnagyobb << endl;
*/
// b) ügyesebben
int legnagyobb = 0;
int d = 2;
while (a > 1) {
if (a % d == 0) {
if (b%d == 0)
legnagyobb = d;
while (a%d == 0)
a /= d;
}
d++;
}
cout << legnagyobb << endl;
return 0;
}
|
4.
Adott egy n természetes szám. Írjuk ki az alábbiakat:
a. Mennyi a 3-nál nagyobb páratlan számjegyeinek az összege? – 0.5p
b. Hány olyan számjegye van, ami összetett szám? – 0.5p
c. Az X kétszeresét, ahol X jelöli azt a számot, melyet úgy kapunk, hogy előbb
leírjuk n páros számjegyeit, majd a páratlanokat (mindkét esetben eredeti sorrendben). – 1p
Pl. bemenet: 72345
kimenet: 12
1
49470
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int osszeg = 0;
int db_osszetett = 0;
int x = 0;
int p = 1;
int masik_n = n;
while (n > 0) {
int szj = n%10;
if (szj > 3 && szj % 2 == 1)
osszeg += szj;
if (szj == 4 || szj == 6 || szj == 8 || szj == 9)
db_osszetett++;
if (szj % 2 == 1) {
x = x + p*szj;
p = p*10;
}
n = n/10;
}
while (masik_n != 0) {
int szj = masik_n%10;
if (szj % 2 == 0) {
x = x + p*szj;
p = p*10;
}
masik_n = masik_n/10;
}
// 72345
// 24735 -> 49470
cout << osszeg << endl;
cout << db_osszetett << endl;
cout << 2*x << endl;
return 0;
}
|
5.
Beolvasunk pozitív egészekből álló sorozatot a konzolról, -1 jelzi majd a sorozat végét
(és ez már nem tartozik hozzá)!
a. Írjuk ki a sorozat három legnagyobb elemét! – 1p
b. Milyen hosszú és hányadik elemnél kezdődik az a leghosszabb rész, ami olyan egymás melletti
elemekből áll, amelyeknek ugyanannyi a 7-tel való osztási maradéka? – 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
| #include <iostream>
using namespace std;
int main()
{
int szam;
cin >> szam;
int max1=-1,max2=-1,max3=-1;
int elozo = -1;
int hossz = 0;
int start = -1;
int poz = 1;
int max_hossz = 0;
int max_start = 0;
while (szam != -1) {
if (szam > max3) {
max1 = max2;
max2 = max3;
max3 = szam;
}
else if (szam > max2) {
max1 = max2;
max2 = szam;
}
else if (szam > max1)
max1 = szam;
if (szam % 7 == elozo % 7) {
hossz++;
}
else {
if (hossz > max_hossz) {
max_hossz = hossz;
max_start = start;
}
hossz = 1;
start = poz;
}
elozo = szam;
poz++;
cin >> szam;
}
if (hossz > max_hossz) {
max_hossz = hossz;
max_start = start;
}
cout << max1 << " " << max2 << " " << max3 << endl;
cout << max_hossz << " " << max_start << endl;
return 0;
}
|