I.2
1
2
3
4
5
6
7
8
9
10
11
12
13
| void f(int n)
{
int i;
for(i=1;i<=n;i++)
if(i%2==0){
cout<<i;
f(i-1);
}
else {
f(i-1);
cout<<i;
}
}
|
Mennyi f(3) értéke?
f(3)
| i=1
| f(0)
| |
| []
| cout << 1
| i=2
| cout << 2
| f(1)
| | i=1
| | f(0)
| | |
| | []
| | cout << 1
| []
| i=3
| f(2)
| | i=1
| | f(0)
| | |
| | []
| | cout << 1
| | i=2
| | cout << 2
| | f(1)
| | | i=1
| | | f(0)
| | | |
| | | []
| | | cout << 1
| | []
| []
| cout << 3
[]
Kimenet: 1211213
II.1.c
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 m, n, nr, i;
cin >> m >> n;
nr = 0;
i = m;
do {
int x = 1;
while (x*x < i) {
x = x + 1;
}
if (x*x == i)
nr = i;
else
i = i+1;
} while (!(i > n || nr != 0));
cout << nr << endl;
return 0;
}
|
II.1.d
...
amíg x*x<i v.e.
| x <- x+1
[]
...
Átírva:
...
ha x*x < i akkor
| v.e.
| | x <- x+1
| |amíg x*x<i
| []
[]
...
Vagy:
...
ha x*x < i akkor
| ismételd
| | x <- x+1
| |ameddig x*x>=i
| []
[]
...
II.3.
1
2
3
4
5
6
| struct prajitura
{
int cod;
double pret;
int informatii[3];
} p;
|
III.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| int ascendent(int n, int x, int y)
{
int s = 0;
for(int i=x; i<=y; i++){
int a=i;
bool jo = true;
do{
if(a%10<n%10){
jo = false;
}
a=a/10;
}while(a>0 && jo);
if(jo) s+=i;
}
return s;
}
|
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
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
| #include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[202];
cin.getline(str, 202);
char eredmeny[202] = "";
char *p = strtok(str, " ");
while (p != NULL) {
int n = strlen(p);
if (n % 2 != 0) {
strcat(eredmeny, p);
}
else {
/*
strcat(eredmeny, p + n/2);
p[n/2] = '\0';
strcat(eredmeny, p);
*/
/* VAGY:
char uj[202];
int c = 0;
for (int i = n/2; i < n; i++) {
uj[c] = p[i];
c++;
}
for (int i = 0; i < n/2; i++) {
uj[c] = p[i];
c++;
}
uj[c] = '\0';
strcat(eredmeny, uj);
*/
// VAGY:
for (int i = 0; i < n/2; i++) {
// p[i] <-> p[i+n/2]
char seged = p[i];
p[i] = p[i+n/2];
p[i+n/2] = seged;
}
strcat(eredmeny, p);
}
strcat(eredmeny, " ");
p = strtok(NULL, " ");
}
eredmeny[strlen(eredmeny)-1] = '\0';
// levagja a " "-t
strcpy(str, eredmeny);
cout << str << endl;
return 0;
}
|
III.3.a
Az algoritmus beolvassa az első intervallumot ([a,b]) majd a
többi ([x,y]) intervallum mindegyikét beolvasás közben
teszteli. Amennyiben van legalább 1 egység hosszú
metszete az első intervallummal (…feltétel…),
akkor számoljuk és megjegyezzük az utolsó ilyen
pozícióját (beolvasás közben követtük a pozíciókat).
Az algoritmus hatékony idő szempontjából, mert egyszer
halad végig az intervallumok sorozatán és mindegyikre
konstans számú műveletet végez.
Memória szempontjából azért hatékony, mert
konstans mennyiségű változót használ, nem menti
le az összes intervallumot.
III.3.b HF
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>
#include <fstream>
using namespace std;
int main()
{
ifstream fin("bac.in");
int a, b;
fin >> a >> b;
int poz = 0;
int x, y;
int hany_jo = 0;
int utolso_poz = -1;
while (fin >> x >> y)
{
++poz;
if (!(y <= a || x >= b)) {
hany_jo++;
utolso_poz = poz;
}
}
cout << hany_jo << " " << utolso_poz << endl;
return 0;
}
|