Adott tulajdonság ellenőrzése
1. (létezik kvantorral)
Adott egy tömb, mondjuk meg, hogy
van-e benne 5-tel osztható elem!
(A válasz “igen” vagy “nem”.)
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
bool talalt = false;
for (int i = 0; i < n; i++)
if (t[i] % 5 == 0)
talalt = true;
if (talalt)
cout << "igen" << endl;
else
cout << "nem" << endl;
return 0;
}
|
2. (bármely kvantorral)
Adott egy tömb, mondjuk meg, hogy
igaz-e rá, hogy minden eleme osztható 5-tel!
(A válasz “igen” vagy “nem”.)
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
bool talalt_rossz = false;
for (int i = 0; i < n; i++)
if (t[i] % 5 != 0)
talalt_rossz = true;
if (talalt_rossz)
cout << "nem" << endl;
else
cout << "igen" << endl;
return 0;
}
|
Megjegyzés: tulajdonképpen azt néztük meg,
hogy létezik-e olyan elem, ami nem jó.
Hol a hiba a következőben?
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
for (int i = 0; i < n; i++)
cin >> t[i];
bool jo = true;
for (int i = 0; i < n; i++)
if (t[i] % 5 == 0) // így nem jó!
jo = true;
else
jo = false;
if (jo)
cout << "igen" << endl;
else
cout << "nem" << endl;
return 0;
}
|
Nem állíthatjuk át a helyességet jelző változó értékét minden körben,
mert akkor tulajdonképpen csak az utolsó elemtől függne a végeredmény
(és nem ezt akartuk)!
3.
https://www.pbinfo.ro/probleme/501/verifegale
Ellenőrizni kell, hogy a tömb minden eleme azonos-e.
Pl.
5
6 6 4 6 6 -> NU
5
6 6 6 6 6 -> DA
Ötlet: minden elemre megnézzük, hogy egyenlő-e az elsővel.
HF.
4.
https://www.pbinfo.ro/probleme/502/verifdiferite
Ellenőrizni kell, hogy a tömb bármely két eleme különböző-e.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #include <iostream>
using namespace std;
int main()
{
int n, t[500];
cin >> n;
for (int i = 0; i < n; i++)
cin >> t[i];
bool jo = true;
for (int i = 0; i < n; i++)
for (int j = i+1; j < n; j++)
if (t[i] == t[j])
jo = false;
if (jo)
cout << "DA" << endl;
else
cout << "NU" << endl;
return 0;
}
|
5.
https://www.pbinfo.ro/probleme/500/verificareordonat
Ellenőrizni kell, hogy a tömb elemei növekvő sorrendben vannak-e.
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int t[500];
for (int i = 0; i < n; i++)
cin >> t[i];
bool jo = true;
for (int i = 0; i <= n-2; i++) {
if (t[i] > t[i+1])
jo = false;
}
if (jo)
cout << "DA" << endl;
else
cout << "NU" << endl;
return 0;
}
|
Vagy (tömb nélkül):
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
| #include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bool jo = true;
int elozo = -1;
for (int i = 0; i < n; i++) {
int szam;
cin >> szam;
if (szam < elozo)
jo = false;
elozo = szam;
}
if (jo)
cout << "DA" << endl;
else
cout << "NU" << endl;
return 0;
}
|
6.
https://www.pbinfo.ro/probleme/290/pareordonate
Ellenőrizni kell, hogy a tömb páros elemei növekvő sorrendben vannak-e.
Ötlet (szétválogatás): a párosakat egy másik tömbbe kigyűjtjük, majd azon az előző feladatnak
megfelelően ellenőrizzük, hogy növekvő sorrendben vannak-e az elemei.
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>
#include <climits>
using namespace std;
int main()
{
int n;
cin >> n;
int t[100];
int index = 0;
for (int i = 0; i < n; i++) {
int szam;
cin >> szam;
if (szam % 2 == 0) {
t[index] = szam;
index++;
}
}
bool jo = true;
for (int i = 0; i <= index-2; i++) {
if (t[i] > t[i+1]) {
jo = false;
}
}
if (jo)
cout << "DA" << endl;
else
cout << "NU" << endl;
return 0;
}
|
Más ötlet: minden párosra ellenőrizzük, hogy nem-e kisebb, mint az
előző páros (egy változóban tárolva, hogy ki az előző páros).
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>
#include <climits>
using namespace std;
int main()
{
int n;
cin >> n;
bool jo = true;
int elozo = INT_MIN;
for (int i = 0; i < n; i++) {
int szam;
cin >> szam;
if (szam % 2 == 0) {
if (szam < elozo)
jo = false;
elozo = szam;
}
}
if (jo)
cout << "DA" << endl;
else
cout << "NU" << endl;
return 0;
}
|
6.b. Szétválogatás általában
Beolvasunk egy n elemű tömböt. Válogassuk szét két másik tömbbe a
páros és páratlan 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
39
40
| #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 tparos[100];
int nparos = 0;
int tparatlan[100];
int nparatlan = 0;
for (int i = 0; i < n; i++)
if (t[i] % 2 == 0) {
tparos[nparos] = t[i];
nparos++;
}
else {
tparatlan[nparatlan] = t[i];
nparatlan++;
}
cout << "parosak: ";
for (int i = 0; i < nparos; i++)
cout << tparos[i] << " ";
cout << endl;
cout << "paratlan: ";
for (int i = 0; i < nparatlan; i++)
cout << tparatlan[i] << " ";
cout << endl;
return 0;
}
|
6.c. Szétválogatás HF
Beolvasunk egy n elemű tömböt. Válogassuk szét két másik tömbbe a prím és nemprím elemeket!
7.
https://www.pbinfo.ro/probleme/162/permcirc
HF (opcionális)
8.
https://www.pbinfo.ro/probleme/2996/paritar
HF (opcionális)