Sunteți pe pagina 1din 209

DANA LICA

MIRCEA P A O I
Dana Lica Mircea
'tr,,;
1 FORMATICA

'-1
Culegere de probleme - Pascal C/C++
pentru clasa a IX a
Editura L&S Soft
2005 Toate drepturile rezervate.
Descrlerea CIP a Bibliotecii a Romniei
LICA,DANA
Fundamentele culegere de probleme
de - Pascal C/C++ pentru clasa a IX-a /
Dana Lica, Mircea - : EdituraL & S Soft,
2005
ISBN973-86022-9-7
1. Mircea
004.43 PASCAL
004.43C
004.43C++
Cuprins
Capitol!
Programarea instructiuni n limbajul de programare Pascal/CIC ++
1.1 Structura - de atribuire ,1
1.1.1 Teste cu alegere s.
1.1.2 Teste cu itemi semiobiectivi U
1.1.3 Probleme rezolvate :?Q
1.1.4 Probleme propuse :?,1
1.2 Structuri repetitive - repetitive
1.2.1 Teste cu alegere
1.2.2 Teste cu itemi semiobiectivi
1.2.3 Probleme rezolvate 49.
1.2.4\Probleme propuse SJ
1.3 Probleme de concurs ce date simple S-9.
1.3.1 Probleme rezolvate S9.
1.3.2 Probleme propuse 91.
Capitol 2
Tipuri de date structurate
2.1 Tabloul unidimensional Z4.
2.1.1 Teste cu alegere ?4
2.1.2 Teste cu itemi semiobiectivi ??
2.1.3 Probleme rezolvate cs.I
2.1.4 Probleme propuse 9.0
2.2 Tabloul bidimensional 9.,1
2.2.1 Teste cu alegere 9.S
2.2.2 Teste cu itemi semiobiectivi ..!.OQ
2.2.3 Probleme rezolvate .1.01.
2.2.4 Probleme propuse UQ
2.3 text i!.6.
2.3.1 Teste cu alegere U9.
2.3.2 Probleme rezolvate U9.
2.3.3 Probleme propuse I.:?9.
2.4 Probleme de concurs ce date structurate
2.4.1 Probleme rezolvate az
2.4.2 Probleme propuse !.JZ
Indicatii
Programarea n Limbajul de
Programare Pascal! C! C ++
Structura - de atribuire

1.1.1 Teste cu alegere
1. Care dintre valori fac parte din tipul ntreg:
a) 23. O
b} -4321
e) -24.0
d) +1234
e} 12345
f} O. O
2. Care dintre au ca rezultat valori din tipul ntreg sau real ?
(Operatorul [] partea iar operatorul mod restul la

a) 3 "* 4 d} 2 mod 10
b} [10.345] e) 10.01 < 14.5
e) not(5)6} f} .J1O.0+6
3. Care dintre sunt corecte sintactic:
a} 10 + 2.3
b) not true;
e} 23 mod 2.0
d} true and 1.0;
e} not true false;
f} 23.45 < 17;
4. Care dintre au ca rezultat valoarea true variabilele ntregi
a b au valorile a = 23 b = 50:
a} a "* b;
b} a > b;
e) a + 10;
d} b ::; a;
e) a mod 10;
f} b a;
S. Care dintre au ca rezultat valoarea 3 variabilele ntregi a
b au valorile a = 45 b = 120:
a) a mod 6;
b} a mod 10;
e) a - 15;
d) b div 39;
e} b - 2*a;
f) a mod 7;
6. Care dintre au ca rezultat valoarea 10.0 variabilele reale x,
y z au valorile x =20.0, y = ]5.0 z =1.5:
a} y/z d} x-y/z
b} y*z
e) .Jx*z
e}
-.r;
f} x- x/2
5
a (a+b+c)/2;
6
7. Care dintre expresii sunt corecte sintactic?
d) 220.0
5) Ct la
6)
7) Rest la
8)
d) 4 e)8
1)
2)
3) Parte
4)
e)240.0
d) ..r;;; *2 - 32
e) [3. 50*x] - 123. 45*y
f) (x+2) mod 3
d) x*y mod a < a mod x
e ) not ( [3 . 5O] <5)
f) y *3 +7 diva
d) 57 mod a<a mod 57
e) [3.50*3] - 15 div 3
f) J10 *2+4 diva
e) 3 + 4 mod 2.3
f) 24 div (7 + 1)
g) 24 div not(7/3)
h) 3 mod div 4 -1
b) O
b)280.0
e) mod
f) []
g) and
h) not
a) /
b) div
c) *
d) -
a) (a*x)or(34>(x - y))
b) a/x/y - x*y
e) (ab+x))and(3<56)
a)400.0
a)2
13. operatorilor din coloana din coloana
14. Care dintre sunt echivalente(conduc la
rezultat) cu
12. Care este valoarea expresiei: 4000/10/10*2 +4*10*10/2
a) not(x*z<z)
b) x*y mod z + x*5
e) (a*2 + 12.5)*5
9. Care dintre expresii sunt reale, toate variabilele care intervin sunt de tip
ntreg?
11. Care este valoarea expresiei: 20 div 10*2+30 dlv 15 * 2
a) (a+3.5)*2
b) a*3 div 4 - x*5
e) not(5<98)
10. Care dintre expresii sunt logice toate variabilele care intervin sunt
de tip numeric (ntreg sau real)? expresiile ca fiind corecte.
8. Care dintre expresii sunt ntregi, toate variabilele care intervin sunt de
tip ntreg?
a) 18 - 3 + 2
b) 18 + 7/3 + 2
e) 2.30 + 3 mod
d) 3 + 7.0/3
a) a b/2 + a/2 + e/2;
b) a a + b + e/2;
e) a _ (a + b)/2 + e/2;
d) a - b/l/2 + a/l/2 + e/l/2;
e) a - a + b/2 + e/2;
f) a _ (a + b)/1/2 + e/l/2;
15. Care sunt valorile variabilelorntregi a b ele
aveau valorilea=82 b=24:
a a mod 2 + b div 2 div 2 ; a) a 5 b 5
b 2 * a mod 2 ; b) a 6 b 6
a a + b; e) a O b 6
b a mod 2 + b + 10 mod 2; d) a 6 b O
e) a O b O
16. Care dintre variabilele a, b, c, d vor avea valoare
ele aveau valorilea=lO, b=20, c=30 d=40:
-[.,Jd*2+.b];
a) a 100,
d = 100
a
b) a 60, e 60
b + b div 2 *5;
e) a 10, e 10 d 10
e -(b - d ) *5 div 10;
d) b 60, d 60
d
-
(d + a + b - e)div 10;
17. mrdinea de executare a pentru ca la final
variabilelex, y, z valori egale, indiferent de valorile avute anterior:
a) x
- x mod
15
a) b, d, a, c;
b) z
_ x div y;
b) c. d, b, a;
e) x _100;
c) a, b, d, c:
d) y
_ x div
10;
d) c, a, b, d;
18. Care dintre atribuiri fac ca valoarea variabilei reale x partea
cu 0.0, indiferent de valoarea a acesteia? parte
este prin operatorul l l )
a) x _ x*lO;
b) x [x] * 10;
e) x [x*J.O];
d) x _ x/10;
e) x [x] + 10.03;
f) x _ [x + 10];
19. Care dintre atribuiri sunt corecte variabilele a b sunt ntregi, iar
variabilelex y sunt reale:
a) x _ a*lO div 3;
b) a _ [x] * b mod 2
e) y _ x mod 2 + 1;
d) b - (x + y) div 10 + a mod 2;
e) x a + b/3;
f) y [x + aJ div 3;
20. Care dintre au ca rezultat valoarea True variabilelentregi
a b au valorile a = 23 b = 50:
a) (a b) and (a>b);
b) ((a+10)<b)or false;
e) true and (a b)
7
d) b mod 10 > a div 7;
e) not false and (a div 10 < b);
f) not (true or (a+b<10));
27. Care sunt valorile variabilelor reale x y executarea
23. Care dintre atribuie variabilei ntregi x una din cifrele sale,
x>10000:
25. Variabila max are valoarea 3. Care dintre de atribuire permite ca
variabila max modifice valoarea din 3 n O?
x div 100 mod 10;
x mod 10 div 1;
x mod 50;
d) x- a < 2
e) 4 + a-b
f) a .... x div 10 mod 10;
d) x
e) x
f) x
d) x a + b/3 + e/3;
e) x a/3 +b/2 +e/2;
f) x {a + b + e)/3;
l
e ) max 2*max - 6
d) max 2 + 5 mod 2
x mod 100;
x mod 10;
x div 10 mod 10;
x -
22.50;
a) x 35.0 y 25.0
Y
[x]+8;
b) x 45.0
Y
75.0
x 2*x;
e) x 28.0 y 30.0
Y
y+x;
d) x 22.5 y 75.0
8
x 3 ;
a) x=O y=3
Y
x+3;
b) x=3 y=O
x
-
x-3;
e) x=6 y=O
d) x=O y=6
a) max_max - 12 div 4
b) max_(max-1) + 3
a) a-a + 3
b) x_a + 3-2
e) b...-b div 2 + 1
24. Care dintre de atribuire sunt corecte, toate variabilele au
tipul ntreg?
26. Care sunt valorile variabilelor x y executarea n ordine a trei
de atribuire?
a) x
b) x
c ) x ...
a) x {a + b + e)/2;
b) x a/3 + b/3 + e/3;
e) x a/1/3 + b/1/3+ e/1/3;
22. Care dintre atribuie variabilei reale x media a valorilor
variabilelor ntregi a, b c :
x .... 1234;
a) x = 12,
Y
18, z 24
y x div 100;
b) x 12,
Y
24, z 18
x x * 2 div 100;
e) x 34,
Y
18, z 24
z .... (x+y) div 2;
d) x 18,
Y
12, z 24
z _ x
21. Care sunt valorile variabilelor x, y z n urma de
(Operatorul- de interschimbare a valorilor a variabile):
28. Care dintre variabilele care intervin n de vor
valoarea
a b+ei a) a e
e a-Ci b) b e
b Ci c) e a
c
-
a-b; d) a, b, e
29. Care sunt valorile variabilelor ntregi a b executarea
a - 1235; b .... a mod 10; a) a 1200 b = 5
[:"ca 'a-blmod 10=0 atunci
b) a 12 b 35
a _ a div 100;
e) a 3500 b 12
b - a mod 100; d) a 1200 b = 12
e) a 1200 b = 35
G:aca a=batunci a .... a*100; f) a 100 b = 35
30. Care sunt-valorile de variabilele ntregi x, y z executarea de
decizie la intrare aveau valorile x =23, y = 14 z =25?
[
a c a (x>l) and (y-z>O) atunci
x _ y-z
altfel"
y .... x-1;
Z y+x;
a) x
b) x
c) x
d) x
e) x
-11,
23,
23,
-11,
23,
y = 14,
Y 22,
Y 22,
Y 22,
Y -11,
z = 25
z 37
z = 45
z = 37
z = 25
31. Care dintre de conduc la a valori pozitive?
a)
rdaca (a>O) and (b=a)
La. scrie (a, b)
b)
(a*bO atunci
l. scrie (a, b)
atunci
c)
(a>O) or (b>O) atunci
l. scrie (a, b)
d)
(a*b>O) and (b>O) atunci
l. scrie (a, b)
32. Care dintre numere numere ntregi din vocabularul limbajului
Pascal /C/C++?
a) -315.2 b) 1982 c) +23 d) 002222 e) 23E2 f) '123'
33, Care dintre numere numere reale din vocabularul limbajului
Pascal /C/C++?
a) 445.6 b) -45.2 c) 22,17 d) pi e) 23E2 f) '12.3'
34. Se program:
beg-in
wri te ( 'Eu ');
writeln('sunt ');
write ( I bine' )
end.
9
void main()
cout "Eu ";
cout "sunt" endl;
cout "bine";
39. Care dintre tipurile tipuri de date reale?
40. variabila a are valoarea -13. tip poate
36. Ce va fi pe ecran n urma apelului writeln(45.23:6:3) n Pascal, respectiv
printf("%6.3fm", 45.23) n C/C++ ?
b)unsigned ai
d) short ai
d) 45.023
d)
Eu
sunt bine
a) flaat b)unsigned char
a)byte ai
c) unsigned int d)dauble
c ) 045.230
a) b)
caut 'A" caut "13.45"
c) d)
caut1.3endl caut 3a
c)
Eu sunt bine
c)int ai
c ) d)
caut-1.3endl caut1.0endl
a) b)
caut -123 caut "1234"
10
b) byte
b) 45.230
d)
writeln(l.O)
d) dauble
b)
write( '13.45')
d)
writeln (3a)
b)
write('1234
')
a) +45.230
37. Care dintre apeluri sunt incorecte sintactic?
a)
write(-123)
a) real
38. Care dintre apeluri conduce la unor caractere ce pot reprezenta un
ntreg?
a)
write("A")
c)
wri teln (1 .3)
c) word
c)
writeln(-1.3)
a) b) a) b)
write( 'A') i write( 'AB') i caut
uAlli
caut "ABil i
write('B')i writeln ('C') i caut
UBl! i
caut
\leII

write('C')i caut
\leII j
endli
c) d) c) d)
writeln( 'AB') i writeln( 'ABC
')
caut"AB"endli caut "ABC"
write('C')i caut lle" ; endl.r
c)var a:integer d)var
a:shartint
a)var a:char b)var a:byte
35. Care dintre conduc la o n format cu cel produs de
apelul: write('ABC') n Pascal, respectiv cout "ABC" in C/C++ ?
n ce fel se va face mesajelor?
a) b)
Eu Eu sunt
sunt bine
bine
41. care dintre de variabile sunt corecte:
a) var a: integer[10];
a) float lt,2t;
b) var x,y:int; b) int a[l. .10];
e) var a,b:real; e) int x,y;
d) var lt,2t:integer; d) string s;
e) var z:longinteger; e) double e ivt
42. a, b sunt variabile de tip integer (varianta Pascal) / int(varianta C/C++), iar x, y
sunt variabile de tip real (varianta Pascal) / jloat(varianta C/C++), care dintre
de atribuiri sunt incorecte:
a) x:=20; y:=10; x:=(x+y)/2;
b) x:=8; y:=10; a:=x+y;
e) x:=4; b:=2; y:=x/b;
d) b:=2; a:=b/2;
e) a:=5; b:=5; x:=a+b;
a) b=2; a=b/2;
b) x=8; y=10; a==x+y;
e) x=4; b=2; y=x/b;
d) x==20; y==10; x=(x+y)/2;
e) a=b=5; x=a+b;
43. Care dintre' sunt corecte sintactic?
a) const ab=30; a) int ab=30;
b) var a+b:integer; b) int a+b;
e) var a1:rea'i; e) float al;
d) var 1ab:ehar; d) char lab;
e) var ro.n:booleani e) int ro.ni
44. Care dintre expresii logice au valoarea true(varianta Pasca))! 1 (varianta
C/C++) pentru:
a:=5i b:=3i e:=true; d:=3; a=5i b=3i e=l; d=3;
a) (a<b) or e a) (a<b)
II
e
b) ( (b=d) and e ) or (a>=b) b) ( (b==d) && e)
"
(a>=b)
e) e and (d>b) e) e && (d>b)
d) (a>b) or'not (d<a) d) (a>b)
"
! (d<a)
e) (a=b) and e e) (a==b) && e
45. Ce valoare are expresia E= albtcsd- a, unde a=36, b=6, c=3, d=4?
a) 36. O b) 40.0 c) -28.0 d) -38.0 e) - 36.0
46. care dintre expresii au valoarea true(varianta Pascal)!
(varianta C/C++)
a) (3<7) and (2<0) or (6=1+3)
b) (3<7) or (2<0) or (6=3+3)
c)not(2<0) or (6=1+3)
a) (3<7) && (2<0) II (6==1+3)
b) (3<7) II (2<0) II (6==3+3)
e)! (2<0) II (6==1+3)
47. care dintre expresii sunt incorecte sintactic. expresiile
corecte.
11
53. Care dintre variabilele declarate n continuare poate avea valoarea -123?
51. Care dintre expresii care numai operanzi reali sunt corecte sintactic?
48. care dintre expresiile sunt corecte sintactic. expresiile
corecte.
d)25
d) int albie;
b)d=char;
e)false{Paseal)
O (C/C++)
a) (a<=b) 1 c
b) (a!=b) & (e<=b)
e) a/e & alb
d) a & b<e+3
e) a & b & e
f) (a!=2) & O
d) Variabila y poate avea valoarea '2'
f) Variabila y poate avea valoarea '-2'
e) Variabila y poate avea valoarea 256
e)int la;
a)char a;
a) 3<5 11 5<>6
b) ! (1 II O)
e) ! 1 && O
d) ! 1 II ! O
e) ! (18<25) && II (3)0)
f)12*2<2)+18
a)3 == 5*(10 - 3*3)-2;
b)25-10 != 3*5
e) (42 % 5) < (42 / 5)
d)10.5 % 2
e)3.14 % (5 < 4) / 5
f)8*3 < 20 % 0.0
b) 32
d ) var
a ;b ;e:word;
b) var d=ehar;
a) Variabila x poate avea valoarea 2
b) Variabila x poate avea valoarea '12'
c) Variabila x poate avea valoarea 23
a)
b)
a)
b)
var nr:byte; var b: ehar;
unsigned char nr; unsigned b;
e) d)
e)
d)
var a:integer; var a: longint; int a;
long a;
12
a)true(Paseal)
1 (C/C++)
a) (a<=b)or c
b) (a<>b)and(e<=b)
e) a/e and alb
d) a and b<e+3
e) a and b and e
f) (a<>2)and false
c ) var
la:integer;
49. Care dintre de variabile sunt corecte?
a) var a:byte;
52. Se expresia (a<b)=((c+ab), n limbajul Pascal, respectiv
(a<b)==((c+ab) n varianta C/C++. Variabilele ntregi care intervin au valorile a=2, b=30
c=5. Ce valoare se n urma acestei expresii?
50. var x: byte; y: char; (varianta Pascal), unsigned
int x; char y;(varianta C/C++).
Care dintre sunt
a)3<4 or 5<>6
b)not(true or false)
e)not true and false
d)not true or not false
e)not(18<25)and or(3)0)
f)12*2 < 2)+18
a)3.0 = 5*(10 - 3*3)-2;
b)25-10 <> 3*5
e)42 mod 5 < 42 div 5
d)10.5 div 2
e)4 mod (5<4) div 5
f)8*3 < 20/10 mod 2
54. Care va fi valoarea variabilei x efectuarea de
x:=3 + 17 div 3i
y:=x + li
x:=y + li
a) 8 b) 9
x=3 + 17/3i
y=x + 1;
x=y + li
e) 10 d) 11
55. valoarea expresiei: abs(-11.2)+sqrt(trunc(16.23)), n limbajul Pascal,
respectiv fabs(-11.2)+sqrt(floor(16.23)) n C/C++.
a) -9.2 b) 15 e) 14.2 d) 15.2
56. valoarea expresiei trunc(abs(-14.2)) mod 7, n limbajul Pascal,
respectiv ((int)fabs(-14.2)) % 7 in C/C++?
a) 14 b) 2 c ) O d) 8
57. valoarea expresiei (99 mod trunc(trunc(8.9)/sqrt(16)) + 1), n
limbajul Pascal, respectiv 99 % (int) (floor(8.9)/sqrt(16)) + 1 n C/C++?
a) 2 b) 1 e) O d) 3
58. valoarea expresiei sqr(17 div 5*2) , n limbajul Pascal, respectiv
(17/5*2)*(17/5*2) in C/C++.
a) 1 b) 36 e) 1800 d) 2
59. care dintre expresiile pot fi atribuite variabilei reale x:
a)
8 mod sqrt(4)
e)
sqr(6 div(-3))
b)
sqrt(63 mod 2)
d)
sqrt (sqr (-2) )
a)
8 % sqrt(4)
e)
(6/-3)*(6/-3)
b)
sqrt(63 % 2)
d)
sqrt(-2 * -2)
60. ntr-un program se cu variabila x a valoare este 10.3.
Ce se va n urma apelului write(x:5:2, abs(x):6:2, trunc(x):3),pentru limbajul Pascal,
respectiv prinlj\"%5.2f%6.2f%3d", x, fabs(x), (int) x) pentru C/C++?
a) 10.30-10.30 10 b) 10.3010.3010 c) 10.30 10.30 10 d) 10.30 10.30010
61. Considernd variabila x variabila a, care va fi de caractere
n urma de
x:=-4.3i
a:=abs(trune(4)) ;
write(a:2,abs(x) :4:2,trune(a+x) :2)
x=-4.3i
a=abs(4)i
printf (" %2d%4. 2f%2d" I a, fabs (x) ,
(int) eeil(a+x));
a) 4 4.300 b) 44.30 O e) 4 4.30 O
13
d) 44.300
63. Ce se va n urma de
62. Presupunem variabila a are valoarea 1O-iar variabila b are valoarea
5. Ce se va n urma de
65. variabilele reale x, y, z au valorilex=12.3, y=- 34.2 z=5.67, ce se va n
urma
d) 13 35 5
d) 15 5
d) 121 12
d) 10 10
c) 12-35 6
c ) 15 10
eouta' "<xb-c-c ' 'e i
e) 5 1
e) 120 11
a=li b=12i e=4i
if (a>b) {
if (x=='.*') a*=3i
}
el se {
if (y=='-') b-=3i
else a+=bi
if (x>y)
x=floor(x)+li
else if (z>y)
z=floor(z)+li
else
y=eeil (y) +1 i
printf("%3.0f%3.0f%3.0f\n",x,y,z)
if (floor(x)==floor(y)) X=Yi
else X+=Yi
eout (int)floor(x) '
(int) floor(y) i
a=10i b=a+1i
if (a!=b) b++i
else a++i
a=b*ai eout a ' , bi
aux=li
if (a<b) aux=ai
a=bi b=auxi eout a' ' bi
14
b) 12 34 6
b) 10 15
b) 120 12
b) 10 5
a) 5 5
a) 13-34 6
66. variabilele caracter x y au valorile x='*' y='-', ce se va n urma

a) 121 11
if trune(x)=trune(y) then
X:=Yi
else x:=x+y
write(trune(x),' ',trune(y))i
a:=li b:=12i e:=4i
if a>b then begin
if x='*' then a:=a*3
end
else
if y='-' then b:=b-3
else a:=a+bi
write(a,' ',b,' I ,e) i
if x>y then
x:=trune(x)+l
else if z>y then
z:=trune(z)+l
else
y: =trune (y) +1 i
writeln(x:3:0,y:3:0,z:3:0) i
a) 5 5
64. Presupunem asupra variabilelor reale x y au fost efectuate atribuirile x=: 10.23
y:=5.14, n Pascal, respectivx=1O.23 y=5.14, n C/C++. Ce se va n urma

a:=10i b:=a+1i
if a<>b then b:=b+1
else a:=a+1i
a:=b*ai write(a, , ',b)i
aux:=li
if a<b then aux:=ai
a:=bi b:=auxi write(a,' ',b)i
a) 13 12 4 b) 3 12 4 c) 1 9 4 d) 3 9 4
67. care dintre alternative sunt corectesintactic:
a) if a:=10 then write(a) ; a) if a=10 couta;
b) if 1<x<5 then begin b) if (1<x<5) { x++; coutx; }
x=x+1; write (x) ; end;
c) if (x=3)or(x=5)then write(x) ; c) if (x==3
II
y==5) coutx;
d) if x<10 then begin d) if (x<10) { coutx; }
write(x) ;
end;
68. Care dintre de n mod corect maximul
dintre trei numere?
a) if (a>b}and(a>c) then max:=a
else
if (b>a)and(b>c) then max:=b
else max:=c;
b) if a>b
if a>c then max:=a
else max:=c else max:=b
c) if a>b then
if a>c than max:=a
else max:=c
else if b>c then max:=b
else maX:=Ci
d) if a>b then
if b>c than max:=b
alsa max:=c
alsa max:=a;
a) if (a>b && a>c) max=a;
else
if (b>a && b>c) max=b;
alse max=c;
b) if (a>b)
if (a>c) max=a;
else max=c; elsa max=b;
c ) if (a>b)
if (a>c) max=a;
else max=c;
alsa if (b>c) max=b;
alsa max=c;
d) if (a>b)
if (b>c) max=b;
elsa max=c;
else max=a;
69. Care dintre n mod corect valoarea variabilei x
intervalului (a,b)
a) if (x<=a) or (x>=b) then
write('NU Apartine')
else write('Apartine')
b) if (x>a)and(x<b) then
write ( 'Apartine' )
else write('NU Apartine')
c) if (x>a) or (x>b) then
write( 'Apartine')
alse write(' NU Apartine')
a) if (x<=a I I x>=b)
cout "NU Apartine";
else cout "Apartine";
b) if (x>a && x<b)
cout "Apartine;
alsa cout "NU Apartine";
c) if (x>a I I x>b)
cout "Apartine";
else cout "NU Apartine";
15
71. Care dintre n mod corect valorile variabilelor a
b sunt consecutive?
70. Care dintre n mod corect valorile variabilelor a, b
c au semn?
a)
if (a>O)and(b>O)and(c>O) then
wri te ( 'Au acelasi semn')
else write(' NU au acelasi semn')
a)
if (a>O && b>O && c>O)
cout "Au acelasi semn";
else cout "NU au acelasi semn";
b)
if (a*b>O && c*b>O)
cout "Au acelasi semn";
else cout "NU au acelasi semn";
c)
if ((a>O && b>O && c>O) II
(a<O && b<O && c<O))
cout "Au acelasi semn";
else cout "NU au acelasi semn";
d)
if (a*b<O II c*b<O II a*c<O)
cout "NU au acelasi semn";
else cout "Au acelasi semn";
d) if (x>a)
if (x<b)
cout "Apartine";
else cout "NU Apartine";
b)
if (a==b+l II a==b-l)
cout "sunt consecutive";
else cout"NU sunt consecutive";
a)
if (a==b+l && a==b-l)
cout "sunt consecutive";
else cout"NU sunt consecutive";
c)
if (a!=b+l && a!=b-l)
cout"NU sunt consecutive";
else cout "sunt consecutive";
d)
if (a-b==l && b-a==l)
cout "sunt consecutive";
else cout"NU sunt consecutive";
16
b)
if (a*b>O)and(c*b>O) then
write('Au acelasi semn')
else write(' NU au acelasi semn')
d) if x>a then
if x<b then
wri te ( 'Apartine' )
else write(' NU Apartine')
b)
if (a=b+l)or(a=b-l) then
write('sunt consecutive')
else write('NU sunt consecutive')
c)
if (a>O)and(b>O)and(c>O) or
(a<O)and(b<O)and(c<O) then
write('Au acelasi semn')
else write(' NU au acelasi semn')
a)
if (a=b+l)and(a=b-l) then
writp.('sunt consecutive')
else write('NU sunt consecutive')
d)
if (a*b<O)or(c*b<O)or(a*c<O)
then write('NU au acelasi semn')
else write(' Au acelasi semn')
c)
if (a<>b+l)and(a<>b-l) then
write('NU sunt consecutive')
else write('sunt consecutive')
d)
if (a-b=l)and(b-a=l) then
write('sunt consecutive')
else write('NU sunt consecutive')
1.1.2 Teste cu itemi semiobiectivi
1. Se algoritm:
1 intreg a, b, c, d;
2 citeste a, b;
c _ a + b;
d - a * b;
raaca c > d atunci
la. c .... d;
t
a c a a mod 2 = O atunci
scrie c, d
10 altfel
11 scrie d, c;
12 stop.
a) Ce valori vor fi a=34
b=2? Dar a=24 b= -2 ?
b) un exemplu pentru datele de
intrare astfel nct algoritmul
la final valori egale.
c) exemplu de valori pentru a b
astfel nct fie o pereche de
valori pare ordonate
d) programul n limbajul de
programare studiat Pascal/C/C++.
2. Se program pseudocod:
intreg a, b;
real x , y;
y;
a _ [x * y];
b - [x / y];
raaca a < b atunci
la. a .... b;
t
a c a x [x] atunci
scrie a, b
altfel
scrie b, ai
stop.
a) Ce valori vor fi x=34.50
y=l 7.1? Dar x=1.5 y= -2.5 ?
b) un exemplu pentru datele de
intrare astfel nct algoritmul
la final valori care au fost citite
la intrare. .
c) exemplu de valori pentru x y
astfel nct fie o pereche de
valori ordonate
d) programul n limbajul de
programare studiat Pascal/C/C++.
3. Se algoritm:
a) Ce valori vor fi a=345
b=238? Dar pentru a=7093 b= 211 ?
b) un exemplu pentru datele de
intrare astfel nct algoritmul
la final valori ca cele citite.
c) Cum trebuie fie valoarea variabilei
a pentru ca valoarea ei nu se modifice
n urma din
algoritm.
d) programul n limbajul de
programare studiat Pascal/C/C++.
b - a mod 100;
t
a c a a div 10 mod 10>5 atunci
a a - a div 10*10
altfel b
scrie a, b;
stop.
intreg a. b ;
citeste a, b; {a,b>100}
raaca a mod 10<b mod 10 atunci
la.a - a - a mod 10 + b mod 10
12
4. Se program pseudocod:
1
11intreg
m,g;
,,;1,82, m1, m2, gl, g2, 8, I a) Ce valori vor fi sl=20;
s2=47; ml=20; m2=1O; gl=3; g2=38;
17
5. Se algoritm:
a) Ce mesaj va fi pentru a=2, b=6
c= -10? Dar pentru a=l, b=3
c=lO ?
b) un exemplu de valori pentru
datele de intrare astfel nct algoritmul
un mesaj necorelat cu semnele
datelor de intrare.
c) algoritmul astfel nct
verifice n mod corect toate cele
trei valori ale datelor de intrare sunt
pozitive.
d) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce valoare va fi a=3 b=8
c=13 ? Dar pentru a=5, b=IO c=O?
b) un exemplu pentru datele de
intrare astfel nct algoritmul
mesajul 'INCORECT'.
c) algoritmul, de
logice, astfel nct o
de decizie.
d) programul n limbajul de
programare studiat Pascal/C/C++.
e) un de a
rezolvare este algoritmul prezentat.
b) un exemplu pentru datele de
intrare astfel nct algoritmul nu
efectueze nici una din
existente n cadrul de decizie.
c) un de a
rezolvare este algoritmul prezentat.
d) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce valori vor fi a=3,
b=38 c=17? Dar pentru a=73, b=15
c= 46?
b) un exemplu pentru datele de
intrare astfel nct algoritmul
stop.
18
intreg a, b ,c :
citeste a, b, c :
aca a*b < O atunci
scrie 'Exista nr. negativ'
altfel
t
a c a b*c < O atunci
scrie 'Exista nr. negativ'
altfel
scrie 'NUMERE POZITIVE'
intreg a, b ,c:
citeste a, b, c:
aca (a + b)/2 = c atunci
scrie 'CORECT'
altfel
daca (a + c)/2 = b atunci
scrie 'CORECT'
altfel
[
a c a (?+b)/2 = a atunci
scrJ.e 'CORECT'
altfel
scrie 'INCORECT':
citeste sl,s2,m1,m2,gl,g2:
s - 81 + 82: m - m1 + m2:
g _ gl + g2:
rdaca 8>60 atunci
19 8 - 8 mod 60: m- m+ 1:
raaca m>60 atunci
m _ m mod 60: g _ g + 1;
scrie g, m, 8: stop.
intreg a, b ,c:
,citeste a, b, c:
rdaca a > b atunci
19aHb
6. Se algoritm:
7. Se algoritm:
a, b, c; stop.
c atunci
c .... b
altfel
a > c
La. a t-+- C;
atunci
valori ce nu sunt ordonate
c) Cum trebuie modificat algoritmul
pentru ca valorile variabilelor a, b, c
fie ordonate
d) programul n limbajul de
programare studiat Pascal/C/C++.
8. Se algoritm:
intreg a, b ,c ;
citeste a, b, c ;{a,b,c>O}
aca (a+b)<c atunci
scrie 'NU'
altfel
aca (c + b) < a atunci
scrie 'NU'
altfel

(c + a) < b atunci
scrie 'NU'
altfel scrie 'Corect'
9. Se algoritm:
a) Ce mesaj va fi pentru a=2, b=6
c=10 ? Dar pentru a=3, b=4 c=5 ?
b) un de a
rezolvare este algoritmul prezentat.
c) un algoritm echivalent,
de logice, care
o de decizie.
d) programul n limbajul de
programare studiat Pascal/C/C++.
intreg a;
citeste a
t
ac a a mod 100 < 50 atunci
a _ a - a mod 100
altfel
a _ a + 100 - a mod 100
scrie a; stop.
a) Ce valoare se va pentru a=
2345? Dar pentru a=70189?
b) un de a
rezolvare este algoritmul prezentat.
c) programul n limbajul de
programare studiat Pascal/C/C++.
10. Se algoritm:
real x;
citeste x;
x - x*10
aca [x] mod 10 atunci
x _ [xl/la
altfel
x _ x*10;
t
dac a [x] mod 10 atunci
x _ [xl/100
altfel
x - x/1000
19
a) Ce valoare se va pentru x=
12.345? Dar pentru x= 12.034?
b) exemplu de valoare pentru x
astfel nct la finalul algoritmului partea
a lui fie de cea
la intrare.
c) exemplu de valoare pentru x
astfel nct, la final, fie o
valoare cu parte cu
0.00.
d) programul n limbajul de
programare studiat Pascal/C/C++.
Algoritmul toate cazurile triunghiului echilateral, isoscel,
respectiv dreptunghic.
1. Considernd cunoscute trei valori reale, ele pot reprezenta lungimi le
laturilor unui triunghi, iar n caz afirmativ tipul acestuia: isoscel, echilateral,
dreptunghic sau oarecare.
#include <iostream.h>
float a,b,c;
void main() {
cin a b C;
if (a<O II b<O II c<O)
cout "Lungimi negative\n";
else
if (a>=b+cl I b>=a+cl I c>=a+b)
cout "Nu este triunghi\n";
else
if (a==b && a==c && b==c)
cout "Echilateral\n";
else
if (a==b I I a==c I I b==c)
cout "Isoscel\n";
else
if (a*a+b*b==c*c I I
b*b+c*c==a*a I I
a*a+c*c==b*b)
cout "Dreptunghic\n";
else
cout "Oarecare\n";
1.1.3 Probleme rezolvate
a) Ce mesaj va fi pentru a=l, b=2,
c =l? Dar pentru a=4, b=-12, c=9?
b) Dati exemplu de valori naturale citite
pentru a, b, c astfel nct se
mesajul 'Nu sunt sol reale'.
c) exemplu de seturi de valori
de intrare pentru care una din valorile
fie O.
d) care din datele de intrare
pot fi declarate ca date de tip ntreg.
e) programul n limbajul de
programare studiat Pascal/C/C++.
20
var a,b,c:real;
begin
readln(a,b,c};
if (a<O}or(b<O}or(c<O) then
writeln('Lungimi negative'}
else
if(a>=b+c}or(b>=a+c)or(c>=a+c)then
writeln('Nu este triunghi')
else
if (a=b)and(a=c)and(b=c) then
writeln('Echilateral')
else
if (a=b)or(a=c)or(b=c) then
writeln('Isoscel')
else
if (sqr(a)+sqr(b)=sqr(c))or
(sqr(b)+sqr(c)=sqr(a))or
(sqr(a)+sqr(c)=sqr(b)) then
writeln('Dreptunghic')
else
writeln('Oarecare') ;
end.
real a, b, c, xl, x2, delta;
citeste a, b, C;
aca a=O atunci
scrie "Ecuatie de grad I"
altfel
delta - b*b - 4*a*c
aca delta>=O atunci
xl _ (-b -
x2 _ (-b +
scrie xl, x2
altfel
scrie "Nu sunt sol reale"
11. Se algoritm:
2. Se o a numitor este un prim. se verifice este

este nu este un multiplu al numitorului.
Variabila a va prelua valoarea
1 var a,b:integer; #include <iostream.h>
2 begin int a,b;
readln (a, b) ; void main() {
if (a mod b=O)then cin a b ;
write ( 'Reductibila, ') if (a%b==O)
else cout "Reductibila";
write('Ireductibila, ') else
if (a<b)then cout "Ireductibila";
write('Subunitara') if (a<b)
else cout "Subunitara" ;
write('Supraunitara') else
end. cout "Supraunitara";
3. Fie x un natural de cel mult 9 cifre. se determine ultima a puteri 2'.
Solutie: a puterilor lui 2 se periodic(din 4 n 4).
1
2
3
4
var x:longint;
begin
readln(x) ;
if x=O then write(l)
else
if x mod 4 =1 then write(2)
else
if x mod 4=2 thenwrite(4)
else
if x mod 4=3 then write(8)
else write(6)
end.
#include <iostream.h>
long x ;
void main() {
cin x;
if (x==O) cout "O";
else
if (x%4==1) cout "2";
else
if (x%4==2) cout "4";
else
if (x%4==3) cout "8";
else cout "6";
4. Se triunghiuri n plan, identificate prin coordonatele vrfurilor lor. se
realizeze un program care cele triunghiuri sunt asemenea.
Solutie: triunghiuri sunt asemenea lungimile laturilor rapoarte
egale(cf. teoremei fundamentale a Fie puncte n plan A(x",y,,) B(Xb,Yb)'
dintre cele puncte este: (x" - xb)2 +(y" - Yb? . Cu ajutorul acestei formule se
lungimile laturi lor celor triunghi uri, verificndu-se apoi rapoartele
care se sunt egale.
var
xl,yl,x2,y2,x3,y3,x4,y4:real;
a,b,c,d,e,f,x5,y5,x6,y6:real;
begin
5 read(xl,yl,x2,y2);
6 read(x3,y3,x4,y4);
21
#include <iostream.h>
float xl,yl,x2,y2,x3,y3,x4,y4,
x5 , y5 , x6 , y6 ;
float a,b,c,d,e,f;
void main() {
cin xl y1 x2 y2;
5. Se puncte n plan, exprimate prin perechi de coordonate (x,y). Ele
centrele a cercuri de Rl , respectiv R2. se verifice cele
cercuri sunt tangente interne, tangente externe, secante sau exterioare.
Solutie: Pentru a determina celor cercuri vom calcula dintre cele
centre. Notnd cu el atunci:
cercurile sunt exterioare el Rl + R2
cercurile sunt tangente externe el=RI + R2
cercurile sunt tangente interne el = IRI - R21
cercurile sunt secante el < IRi - R21 el < RI + R2
un cerc este interior celuilalt el < IRi - R21
cin x3 y3 x4 y4;
cin x5 y5 x6 y6;
a={xl-x2)*{xl-x2) +
(yl-y2)*{yl-y2);
b=(xl-x3)*(xl-x3) +
(yl-y3)*(yl-y3);
c={x2-x3)*{x2-x3) +
(y2-y3)*{y2-y3) ;
d=(x4-x5)*(x4-x5) +
(y4-y5)*(y4-y5);
e={x4-x6)*(x4-x6) +
(y4-y6) * (y4-y6) ;
f={x5-x6)*{x5-x6) +
(y5-y6)*{y5-y6);
if (a/d==b/e && a/d==c/f)
caut "DA";
else
caut "NU";
#include <iostream.h>
#include <math.h>
float xl,yl,rl,x2,y2,r2,d;
void main() {
cin xl yl rl;
cin x2 y2 r2;
d=sqrt((xl-x2)*{xl-x2)+
(yl-y2)*{yl-y2)) ;
if (d>rl+r2)
caut "Exterioare";
else
if (d==rl +r2 )
caut "Tangente ext";
else
if (d<rl+r2 &&d>fabs{rl-r2))
caut "Secante";
else
if (d==fabs(rl-r2))
caut "Tangente int";
else
if (d<fabs(rl-r2))
caut "Interioare";}
22
var xl,yl,rl,x2,y2,r2,d:real;
2 begin
3 read(xl,yl,rl);
4 read(x2,y2,r2);
5 d:=sqrt({xl-x2)*(xl-x2)+
6 (yl-y2)*(yl-y2));
7 if (d>rl+r2) then
8 write{'Exterioare')
else
if (d=rl+r2) then
write('Tangente ext')
else
if (d<rl+r2)and(d>abs(rl-r2))
then
write ( 'Secante')
else
if (d=abs(rl-r2)) then
write('Tangente int')
else
if (d<abs{rl-r2)) then
21 write('Interioare')
22 end.
read{x5,y5,x6,y6) ;
a:={xl-x2)*(xl-x2) +
(yl-y2) * (yl-y2) ;
b:={xl-x3)*{xl-x3) +
(yl-y3)*(yl-y3) ;
c:={x2-x3)*{x2-x3) +
(y2-y3)*{y2-y3) ;
d:=(x4-x5)*(x4-x5) +
(y4-y5)*{y4-y5) ;
e:=(x4-x6)*{x4-x6) +
17 (y4-y6)*(y4-y6);
18 f:={x5-x6)*(x5-x6) +
19 (y5-y6)*{y5-y6);
20 if (a/d=b/e)and{a/d=c/f)
21 then
22 write{ 'DA')
23 else
24 write{'NU');
24 and.
6. Se patru puncte n plan A, B, C, D, exprimate prin perechea de coordonate (x,y)
ce un patrulater convex. se verifice cele patru puncte un
paralelogram. Coordonatele punctelor sunt introduse n ordinea (x;\,y;\) (XB,YB) (xe,ye)
(XD,YD).
Solutie: Patru puncte un paralelogram diagonalele se n
punct. Vom verifica coordonatele mijloacelor celor diagonale sunt
1 var
2 xl,yl,x2,y2,x3,y3,x4,y4:real;
3 begin
4 read(xl,yl,x2,y2);
5 read(x3,y3,x4,y4);
6 if (xl+x3=x2+x4)and
7 (yl+y3=y2+y4) then
8 write( 'DA')
9 else
10 \write('NU');
11 end.
#include <iostream.h>
float xl,yl,x2,y2,x3,y3,x4,y4;
void main() {
cin xl yl x2 y2;
cin x3 y3 x4 y4;
if (xl+x3==x2+x4 &&
yl+y3==y2+y4)
cout "DA";
else
cout "NU";
7. un program care un punct X din plan se n interiorul unui
triunghi, pe laturile acestuia sau este exterior lui. Se cunosc coordonatele punctului A
coordonatele vrfurilor triunghiului.
Solutie: Punctul X este interior triunghiului ABC suma ariilor triunghiurilor AXB, XAC
XBC este cu aria triunghiului ABC. una din ariile triunghiurilor care l au ca
vrf pe X este cu Oatunci punctul X se pe laturile triunghiului ABC.
1 var
2 xl,yl,x2,y2,x3,y3,x,y:real;
3 a,al,a2,a3:real;
4 begin
5 read(xl,yl,x2,y2);
6 read(x3,y3,x,y);
7 a:=abs(xl*(y2-y3)-yl*
8 (x2-x3)+x2*y3-x3*y2) *0.5;
9 al:=abs (xl* (y2-y)-yl*
10 (x2-x)+x2*y-x*y2)*O.5;
11 a2:=abs(xl*(y-y3)-yl*
12 (x-x3)+x*y3-x3*y)*O.5;
13 a3:=abs(x*(y2-y3)-y*
14 (x2-x3)+x2*y3-x3*y2)*0.5;
15 if (al=0)or(a2=O)or(a3=0)
16 then write('Pe laturi')
17 else
18 if (al+a2+a3=a) then
19 write('Interior')
20 else
21 write('Exterior')
22 end.
23
#include <iostream.h>
#include <math.h>
float xl,yl,x2,y2,x3,y3,x,y;
float a,al,a2,a3;
void main() {
cin xl yl x2 y2;
cin x3 y3 x y;
a=fabs(xl*(y2-y3)-yl*
(x2-x3)+x2*y3-x3*y2)*O.5;
al=fabs(xl*(y2-y)-yl*
(x2-x)+x2*y-x*y2)*O.5;
a2=fabs (xl* (y-y3)-yl*
(x-x3)+x*y3-x3*y)*0.5;
a3=fabs(x*(y2-y3)-y*
(x2-x3)+x2*y3-x3*y2)*0.5;
if (al==O II a2==O II a3==0)
cout "Pe laturi";
else
if (al+a2+a3 == a)
cout "Interior";
el se
cout "Exterior";
24
9. Se patru puncte n plan, exprimate prin perechea de coordonate (x,y). se
verifice cele patru puncte un dreptunghi.
#include <iostream.h>
float xl,yl,x2,y2,x3,y3,x4,y4;
float dl,d2;
void main() {
cin xl yl x2 y2;
cin x3 y3 x4 y4;
dl=(xl-x3)*(xl-x3)+
(yl-y3)*(yl-y3);
d2=(x2-x4)*(x2-x4)+
(y2-y4)*(y2-y4);
if (xl+x3==x2+x4 &&
yl+y3==y2+y4 && dl==d2)
caut "DA";
else
caut "NU";
#include <iostream.h>
float xl,yl,x2,y2,x3,y3,xa,ya;
void main() {
cin xl yl x2 y2;
cin x3 y3 xa ya;
if ((xl+x2+x3)/3.0 xa &&
(yl+y2+y3)/3.0== ya)
cout"Centru de greutate";
else
caut "NU";
var
xl,yl,x2,y2,x3,y3,xa,ya:real;
begin
read(xl,yl,x2,y2);
read(x3,y3,xa,ya) ;
if ((xl+x2+x3)/3.0=xa)and
((yl+y2+y3)/3.0)=ya)then
write('Centru de greutate')
else
write ( 'NU')
end.
end.
var xl,yl,x2,y2,x3,y3:real;
dl,d2,x4,y4:real;
begin
read(xl,yl,x2,y2) ;
read(x3,y3,x4,y4);
dl:=(xl-x3)*(xl-x3)+
(yl-y3) * (yl-y3) ;
d2:=(x2-x4)*(x2-x4)+
(y2-y4)*(y2-y4);
if (xl+x3=x2+x4) and
(yl+y3=y2+y4)and
(dl=d2) then
wri te ( 'DA' )
else
write('NU')
Solutie: Patru puncte un dreptunghi diagonalele sunt egale se
n punct.
Solutie: lungimea comune, apoi aria acestei

10. Se dreptunghiuri, cu laturile paralele cu axele, n plan ale vrfuri
sunt exprimate prin perechi de coordonate (x,y). se determine aria comune ale
celor dreptunghiuri. Coordonatele punctelor unui dreptunghi sunt introduse n ordinea
(XA'YA)' (XB,yB) (xe,ye) (XD'YD)'
8. Se trei puncte n plan, exprimate prin perechi de coordonate (x,y). se
verifice un punct A centrul de greutate al triunghiului format de cele trei
puncte.
Solutie: Coordonatele centrului de greutate al unui triunghi se ca medie a
celor trei coordonate vrfurilor triunghiului. de la
faptul acesta se pe orice la 2/3 de coordonatele vrfului la 1/3 de

var xl,yl,x2,y2,x3,y3,x4,y4,
x5,y5,x6,y6,x7,y7,x8,y8,
vx, vy:real;
begin
read(xl,yl,x2,y2) ;
read(x3,y3,x4,y4) ;
read(x5,y5,x6,y6) ;
read(x7,y7,x8,y8) ;
if (xl<=x5)and(x5<=x2)and
(xl<=x6)and(x6<=x2)then
vx:=x6-x5
else
if (x5<=xl)and(xl<=x6)and
(x5<=x2)and(x2<=x6)then
vx:=x2-xl
else
if (xl<=x5)and(x5<=x2)then
vx:=x2-x5
eJ.se
if (xl<=x6)and(x6<=x2)then
vx:=x6-xl;
23 if (yl<=y5)and(y5<=y2)and
24 '-(yl<=y6) and(y6<=y2) then
25 vy:=y6-y5
26 else
27 if (y5<=yl)and(yl<=y6)and
28 (y5<=y2) and(y2<=y6) then
29 vy:=y2-yl
30 else
31 if (yl<=y5)and(y5<=y2)then
32 vy:=y2-y5
33 else
34 if (yl<=y6)and(y6<=y2)then
35 vy:=y6-yl;
36 write (vx*vy) ;
37 end.
#include <iostream.h>
float xl,yl,x2,y2,x3,y3,x4,y4,
x5,y5,x6,y6,x7,y7,x8,y8;
float vx, vy;
void main()
cin xl yl x2 y2;
cin x3 y3 x4 y4;
cin x5 y5 x6 y6;
cin x7 y7 x8 y8;
if (xl<=x5 && x5<=x2 &&
xl<=x6 && x6<=x2)
vx=x6-x5;
else
if (x5<=xl && xl<=x6 &&
x5<=x2 && x2<=x6)
vx=x2-xl;
else
if (xl<=x5 && x5<=x2)
vx=x2-x5;
else
if (xl<=x6 && x6<=x2)
vx=x6-xl;
if (yl<=y5 && y5<=y2 &&
yl<=y6 && y6<=y2)
vy=y6-y5;
else
if (y5<=yl && yl<=y6 &&
y5<=y2 && y2<=y6)
vy=y2-yl;
else
if (yl<=y5 && y5<=y2)
vy=y2-y5;
else
if (yl<=y6 && y6<=y2)
vy=y6-yl;
caut vx*vy;}
1.1.4 Probleme propuse
1. un algoritm pentru calculul expresiilor A=2+x-y ; B=x*A-2+y ; C=A-
2*B+x.
2. un algoritm pentru determinarea perimetru lui ariei unui triunghi i se
cunosc lungimile laturilor.
3. un algoritm pentru rezolvarea n numerelor reale a de gradul
1 Ca *x + b = O).
25
26
9. cte un algoritm pentru calculul valorilor expresii:
10. un algoritm care trei numere ntregi sunt pitagorice.
1
5 *x daca x < 10
B = 2 - x daca O:S; x :s; 10
3 +x daca x > 10
{
3*x -1 daca x < O
A=
2-x daca
1
2 - x daca x < O
c=
max{ x
2
,11x} daca x O
7. Maria a depus la o de bani. Se pe ea are o de 30%
din valoarea la acel moment. Care va fi valoarea la C.E.C 3 luni
cunoscnd suma faptul Maria nu a ridicat dobnda, ea
n fiecare la suma algoritmul de rezolvare al acestei
probleme.
{
a *x+b* y =O
x+c*y=l
5. produce devalorizarea monedei Ct a costat un caiet anul trecut,
a fost de 50% pe an? algoritmul de rezolvare a acestei probleme care
este actual al caietului.
6. Andrei a depus la o o de bani. n fiecare el o
de 30% din valoarea Care va fi valoarea la C.E.C 3 luni
se valoarea algoritmul de rezolvare al acestei probleme.
4. un algoritm pentru rezolvarea n numerelor reale a sistemului de

8. un algoritm care citind de la trei numere reale suma celor
pozitive.
11. un program care va determina media la o avnd la
cele trei note din oral.
12. un program care va determina media la o avnd la
cele trei note din oral nota din
13. un program care va determina lungimea ipotenuzei unui triunghi dreptunghic,
i se cunosc lungimile catetelor.
14. un program care perimetrul aria unui cunoscndu-se
lungimea laturii acestuia.
15. un program care un procent p din salariul unui muncitor. Se vor citi
de la att salariul ct procentul dorit.
Exemplu: Pentru salariul s=3000000 procentulp=15 se va 450000.
16. Cunoscndu-se suma de bani de Ionel nainte de a trei cadouri,
valoarea un program care suma
Exemplu: Pentru suma s=3000000 cadourile de valoare 100000, 200000
300000 se va 2400000.
17. O face n fiecare minut cte un salt. Lungimea primului salt este p (valoare
de la care, fiecare salt are lungimea de lungimea
saltului anterior un program care de
n cinci salturi.
Exemplu: pentru p=2 se va 62 (2+4+8+16+32)
18. un Il>I00. un program care ultimele cifre
ale lui suma acestora.
Exemplu:
Pentru Il=10234 se va 34 7.
19. un n de patru cifre. un program care primele
cifre ale lui produsul acestora.
Exemplu: Pentru n=1234 se va 122.
20. un Il de trei cifre. un program care pe cte o linie
fiecare a acestuia.
Exemplu: 1
Pentru n=123 se va 2
3
21. un program care, citind de la trei numere reale, suma celor
pozitive.
22. cte un algoritm pentru calculul valorilor expresii
A= {min(x* y,x+ z)
2 *z altfel
ptr x:f:. y
{
min(x * y,x+ z) ptr x:f:. Z
B=
max(2 *z, x - y) altfel
23. un program care n ordine cifrele zecilor unui
natural Il citit.
Exemplu:
Pentru n=1243 se va 34
24. un program care un este impar n caz afirmativ
suma dintre cifra zecilor cifra n cnd citit este par se va
mesajul "Numar par"
Exemplu:
Pentru n=1243 se va 7.
\
27
1. Care dintre 5
1.2.1 Teste cu alegere
!II Structuri repetitive - repetitive
4 executa
rpentru j 7,3 -1 executa
lmr nr nr+1
e)
rpentru d -1,
lmr nr nr+1
d)
28
a)
rpentru d 0,5 executa
lmr nr nr+1
b)
rpentru j -1,3 executa
lmr nr nr+1
29. Se citesc numere naturale. se valoarea subunitare care se poate
forma cu cele numere. Valoarea va fi cu 3 zecimale.
Exemplu:
Pentru x=2 y=4 se va 0.500.
30. un program care semnul majoritar a 5 valori citite de la
un mesaj
Exemplu:
Pentru valorile 2, -3, -14.2, 2, -4.3 se va mesajul: "Majoritatea negative"
28. Se o valoare x natural. se realizeze un program care va cele mai
apropiate numere pare de x.
Exemplu: Pentru x=14 se va 12 16
Pentru x=15 se va 14 16
27. Se de la o valoare x (x>1O). valoarea are cifra
cu cifra zecilor se vor primele numere naturale mai mari dect
valoarea x. n caz contrar se va cifra dintre cifra zecilor a
Exemplu:
Pentru n=3455 se va 3456 3457
Pentru n=3485 se va 8
25. un program care suma a unghiuri exprimate n grade, minute
secunde.
Exemplu:
Pentru primul unghi de 37 1022 (grade, minute secunde), pentru al doilea unghi de
1052 15, se va 48237.
26. un program care citind de Ia o valoare x (x<365), pe ecran n
ce a anului se ziua cu x a anului.
Exemplu:
Pentru x=33 se va 'februarie"
2. Care dintre permite n ordine, a valorilor 10, 12, 14, 16,
18,20?
a)
rpentru d 8,18 executa
La scrie (d + 2);
b)
[
e n t ru j 10,20 executa
raaca j 2=0 atunci
la. j;
e)
rpentru d 0,5 executa
La scrie (10 + d*2);
d)
rpentru j 0,10 executa
La scrie (j*2 + 10);
3. Ce se va pe ecran n urma

j 11,15 executa
i mod 2=0 atunci s
altfel s
s-jmod2
s+jmod2
scrie s; stop.
a) 3 b) 4 e) -4 d) -3
4. Care este valoarea pe care o poate lua contorul pentru ca n urma
de mai jos se valoarea 4 ?

scrie nr;
stop.
10, ? ,-1 executa
mod 2=0 atunci
nr + 1
a) 1 b) 2 e) 3 d) 4
5. Care dintre variantele un algoritm care n mod corect
un este prim?
a) citeste n {n>l}
nr O
[
e n t r u d 1,n executa
raaca n mod d = O atunci
la.nr nr + 1
t
a c a nr=O atunci
scrie "Prim"
altfel
scrie "Nu este prim "
e) citeste n {n>l}
nr O
[
e n t r u d I,n executa
raaca n mod d = O atunci
la.nr nr + 1
t
a c a a
7unci

altfel
scrie "Nu este prim "
29
6. Care dintre conduce la pe ecran a valorii 5?
7. Care dintre de permit valorii 731?
b} citeste n {n>l}
nr - O
[
e n t ru d _ 2,n-1 executa
rdaca n mod d = O atunci
Lanr - nr + 1
t
a c a nr=O atunci
scrie "Prim"
altfel
scrie "Nu este prim "
nr _ 1357; i _ 1;
[.
a t timp nr > O executa
i _ i + 1;
nr _ nr div 10 ;
nr _ O; i_O;
cat timp nr<45 executa
[
a c a nr mod 10 = O atunci
nr _ nr + 5;
i - i + 1;
nr nr + 5
scrie i.
scrie i.
nr - 12307; i-O;
[
a t timp nr > O executa
i - i*10 + nr mod 10;
nr - nr div 100
scrie i.
nr _ 137; i-O;
[
a t timp nr > O executa
i - i*10 + nr mod 10;
nr _ nr div 10 ;
scrie i
e}
d}
e)
d}
d} citesten {n>l}
nr _ O
[
en t r u d _ 2,n-1 executa
rdaca n div d = O atunci
La nr - nr + 1
[
da c a nr=O atunci
scrie "Prim"
altfel
scrie "Nu este prim
30
nr _ O; i-O;
cat timp nr<10 executa
[
da c a nr mod 10 = O atunci
nr _ nr + 5;
i _ i + 1;
nr nr + 5
nr _ 731;
[
a t timp nr > O executa
scrie nr mod 10
nr - nr div 100 ;
scrie i.
nr - 1327; i_O;
[
a t . timp nr < O executa
nr mod 2 = 1 atunci
L. i - i*10 + nr mod 10;
nr _ nr div 10 ;
scrie i.
nr _ 1234; i _ 1;
[
a t timp nr > 9 executa
i - i + 1;
nr - nr div 100 ;
scrie i.
a)
b}
b}
a)
8. Se algoritm descris n pseudocod. Ce se va n urma
(operatorul % restul la
intreg a, b;
a - 10;
b +- 2i a) *
rcat timp a<15 executa
l a
% b=O atunci scrie '*'
b) **
a - a + 1;
e) ***
b _ b
+ l',
d)
****
stop.
9. Care este valoarea pe care o poate avea variabila x, astfel nct
while-do nu efectueze nici o
intreg x,y;
x _ ?; Y _ 10;
[
a t
scrJ.e y;
x _ x + 1;
stop.
executa
a) 5
b) O
c ) 6
d) 7
10. Care dintre un infinit de
a)
x _ 100;
[
a t timp x>10 executa
rdaca x mod 2 = 1 atunci
La scrie x mod 10;
x _ x div 10 ;
e)
d)
x -
100; y - 10
timp x<y executa
scrie x;
_ x div 10 ;
b)
x -
100; y - 10
timp x>y executa
scrie x;
- x * 10 div 10 ;
x _ 100;
[
a t timp x>lO executa
rdaca mod 2 = 1 atunci
La acz'ae x ;
11. Care dintre conduce la pe ecran numai a unor valori
pare?
a)
citeste x;

x.mod 2 = O atunci
La scrJ.e x mod 10;
x _ x div 10 ;
pana cand x=O;
e)
citeste x;

x,div 2 = O atunci
La acz-ae x mod 10;
x _ x div 10 ;
pana cand x=O;
31
12. Care dintre de permite primei cifre a unui

13. Se algoritm descris n pseudocod. Ce se va n urma

14. Care este valoarea pe care o poate avea variabila x, astfel nct cu
test final efectueze o
Ilx>10
div 10
cand x>=lO;
citeste x
C
ep e t a
x +- X
pana
scrie x
d)
y 1;
[
ep e t a
scrie y ;
y y + 2;
pana cand y>=10;
e)
citeste x Ilx>lO
repeta
[
da c a x<100 atunci
x x div 10
altfel
x x div 100
pana cand x<10;
scrie x;
e) 19
a) 18
b) 20
d)
d) 20
32
intreg a, s;
a) 9 3
s +- Oi a O;
[pete
b) 11 3
a a + 1;
s s + a;
e) 10 4
pana cand s >= la;
scrie s, a;
d) 11 4
stop.
a)
citeste x Ilx>lO
cepeta
x x div la ;
pana cand x>lO;
scrie x;
b) citeste x Ilx>lO
cepeta
x x div 10 ;
. pana cand x<10;
scrie x;
b)
citeste X; y O;

X mod 2 = O atunci
l.y y*10 + x mod 10;
x x div 10 ; scrie y
pana cand x=O;
intreg x,y;
x ?; Y 10;
[
e p e t a
scrie y;
y y - 1;
pana cand x > 2*y;
stop.
15. Care dintre un infinit de
x _ 31;

x mod 10 > O atunci


lm
X
-
X
+
2
pana cand x mod 10 O
a)
b)
x _ 100;
[
ep e t a
raca x mod 10
lm
X
-
X
+
1
x - x div 10 ;
pana cand x > 9
< 5 atunci
e)
d)
< 5 atunci
1
x - 32i

x mod 10 > O atunci


lm
X
-
X
+
2
pana cand x mod 10 1
16. Se
i: =0; j: = ?
while (i+j<=10) do begin
i: =i+1 ;",
j:=j-2;
end;
i=O;
while (i+j<=10) {
i=i+1;
j=j-2;
}
Valoarea pentru variabila} astfel nct de mai sus
nu se execute la infinit(necontrolat) este:
a) 1 b) 5 e) 6 d) 17 e) 10 f) 2
17. a, b sunt variabile de tip integer (varianta Pascal) / int(varianta C/C++),
care dintre structuri repetitive sunt infinite:
a) a:=10i b:=O;
repeat
dee (a); ine (b) ;
until a=b;
b) a:=li b:=5;
while(a+b<=10) do begin
a:=a+2; b:=b-2;
end;
c) a:=O; b:=10;
while(a<=10)and(b>=0) do
begin
ine (b); ine (a) ;
end;
d) a:=O; b:=10;
while(a<=10)or(b>=0) do
ine(b) ;
a) a=10i b=Oi
do{
a--i b++i}
while (a! =b) ;
b) a=l; b=5;
while(a+b<=10) {
a=a+2;
b=b-2;}
c) a=O; b=10;
whilea<=10)&&(b>=0)){
b++;
a++;}
d) a=O; b=10;
while ( (a<=10) I j(b>=O)) {
b++; }
33
20. Ce se va n urma program?
18. Se de program n care i, k, n sunt variabile de tip integer
I int (varianta PascallC++), iar a, b, x sunt variabile de tip reali float(varianta PascallC++):
19. Care dintre de program pe ecran de numere
1 2 2 3 3 3 4. 4. 4. 4. 5 5 5 5 5 (variabilele i sunt de tip ntreg)?
e) 2 5 3 4 d) 2 5
a) (a<=x) && (b>=x)
b) (x>=a) II (x<=b)
c) ! ((x<a) II (x>b))
d) (x<=a) && (x>=b)
einx:
if (...... ) k++;
}
eoutk;
#include<iostream.h>
int n=7,i:
void main() {
for (i=2: i<=n-2: i++)
if (i%2==0) eout i ' ,
n-i Iii
einabn;
k=O:
for(i=l:i<=n;i++)
{
34
e) 2 5 4 3 b) 2 4 4 6
cu care dintre expresiile pot fi nlocuite punctele din de mai sus
astfel nct se cte dintre cele n valori citite n x se n intervalul [a.b] (se
presupune a<=b).
a) for i:=l to 5 do a) for(i=lii<=5ii++)
for j:=l to 5 do for(j=lij<=5;j++)
write(i, ' ') ; eouti/1
\\ .
,
b) for i:=l to 5 do b) for(i=1:i<=5;i++)
for j:=l to i do for(j=l:j<=i:j++)
write(i, ' ') : eouti/1
\\ .
,
c) for i:=l to 5 do c) for(i=1;i<=5;i++)
for j:=l to i do for(j=l:j<=i;j++)
write(j, ' ') ; eoutj"
\\ .
,
d) for i:=l to 4 do d) for(i=lii<=4:i++)
for j:=i+l to 5 do for(j=i+l:j<=5:j++)
write (i, ' ') ;
eouti" \\ i
var n,i :integer ;
begin
n:=7;
for i :=2 to n-2 do
if i mod 2=0 then
write(i,' ',n-i,' '):
a) 2 4 6
a) (a<=x) and (b>=x)
b) (x>=a) or (x<=b)
c) not ((x<a) or (x>b))
d) (x<=a) and (x>=b)
end.
read(a,b,n) :
k:=O:
for i:=l to n do
begin
read(x) ;
if then k:=k+l:
end:
write(k) :
21. Cte caractere se vor n urma de
var n,i,j :integer ;
begin
n:=5;
for i :=1 to n do begin
write(i) ;
for j:=1 to 3 do write(j);
end;
end.
#include<iostraam.h>
int n, i, j;
void main() {
n=5;
for (i=1; i<=n; i++) {
couti;
for (j=1; j<=3; j++) coutj;
}
}
a) 5 b) 6 c) 16 d) 20 e) 24
22. Un o putere a lui 2 (2
K
) orice divizor al (mai mare ca 1) este
par. Care dintre de n mod corect un
n este o putere a lui 2 ?
.....
a)
ok:=false;
for i :=2 to n do
if (n i=O)and(i mod 2=0)
than ok: ;
if ok then write('DA')
alsa write('NU');
b)
ok:=true;
for i :=2 to n do
if (n mod i=O)and(i mod 2=0)
than ok:=false;
if ok than write ( 'DA' )
alsa write( 'NU');
c)
ok:=true;
for i :=2 to n do
if (n mod i=O)and(i mod 2<>0)
than ok:=false;
if ok then write( 'DA')
alse write( 'NU');
d)
ok:=false;
for i :=2 to n do
if (n mod i=O)and(i mod 2<>0)
than ok:=true;
if not ok than write ('DA')
alse write ('NU') ;
a)
ok=O;
for (i=2; i<=n; i++)
if (n%i==O && i%2==0) ok=1;
if (ok) cout "DA";
alsa cout "NU";
b)
ok=1;
for (i=2; i<=n; i++)
if (n%i==O && i%2==0) ok=O;
if (ok) cout "DA";
alse cout "NU" i
c)
ok=li
for (i=2i i<=n; i++)
if (n%i==O && i%2>0) Ok=Oi
if (ok) cout "DA" i
alse cout "NU" i
d)
ok=O;
for (i=2; i<=ni i++)
if (n%i==O && i%2>0) ok=1i
if (! ok) cout "DA";
alsa cout "NU";
23. Un este perfect suma divizorilor (strict mai mici dect el) este cu
respectiv. De exemplu 6 este perfect deoarece 6=1+2+3. Care dintre
de n mod corect un este perfect?
35
24. Care dintre permit unui de 15 caractere pe
ecran?
a)
S:=Oi
for i :=1 ta n div 2 do
if n mod i=O then S:=S+ii
if s=n then write( 'DA')
else write('NU')i
b)
s:=l;
for i :=2 ta n div 2 do
if n mod i=O then S:=S+ii
if s=n then write ('DA')
else write('NU') i
c)
s:=O;
for i :=1 ta n div 2 do
if n div i=O then S:=S+ii
if s=n then write('DA')
else write ( 'NU' ) ;
d)
s:=li
for i :=1 ta n div 2 do
if n mod i=O then S:=S+ii
if s=n then write( 'DA')
else write('NU') i
a)
for i :=1 ta 3 do
for j:=l ta 5 do write('DA')
b)
for i :=1 ta 3 do begin
write ('A') i
for j:=l ta 4 do
write('B')i
endi
c)
for i :=2 ta 4 do
for j:=l ta 5 do write('A')
d)
for i :=1 ta 30 do
if i mod 2=0 then
write( 'A')
a)
S=Oi
for (i=li i<=n/2i i++)
if (n%i==O) S+=ii
if (s==n) caut "DA" i
else caut "NU" i
b)
s=l;
for (i=2i i<=n/2i i++)
if (n%i==O) S+=ii
if (s==n) caut "DA" i
else caut "NU" i
c)
S=Oi
for (i=li i<=n/2i i++)
if (n/i==O) S+=ii
if (s==n) caut "DA" i
else caut "NU" i
d)
s=li
for (i=li i<=n/2ii++)
if (n%i==O) S+=ii
if (s==n) caut "DA" i
else caut "NU" i
a)
for (i=li i<=3i i++)
for (j=li j <=5i j++)
'caut "DA" i
b)
for (i=li i<=3i i++) {
caut "A"i
for (j=li j<=4i j++)
caut "B" i
}
c)
for (i=2i i<=4i i++)
for (j=li j<=5i j++)
caut "A" i
d)
for (i=li i<=30i i++)
if (i%2==0) caut "A"i
36
25. Ce se va pe ecran n urma de
pentru variabila x au fost citite valorile 23,25, 345, 892 3456 ?
for i :=1 to 5 do begin
readln{x) ;
if i mod 2=0 then
write{x mod 10)
else write{ x div 10 mod 10);
end;
for (i=l; i<=5; i++)
cin x;
if (i%2==0) caut x%10;
else caut (x/10)%10;
a) 3 2 5 9 5 b) 3 5 5 9 2 c) 2 5 5 9 5 d) 2 5 5 2 5 e) 2 5 4 2 5
26. Care dintre FOR sunt incorecte sintactic?
,:
a)
for i := 1 to n div 2 do
write ('i');
b)
for i:= n down to n div 2 do
write(i);
c)
for i :=1 to n I 2 do
write{ 'i');
d)
for i = 1 to n div 2 do
write{i);
a)
for (i=l; i<=n/2; i++)
cout 'i';
b)
for (i=l ta n) do
cout i;
c)
for (i=l; i <= n div 2; i++)
caut 'i';
d)
for (i:=l; i<=n/2; i++)
caut i;
27. Care dintre FOR n mod corect suma numerelor pare
mai mici sau egale cu n?
a)
s:=O;
for i .- 1 to n do
if i mod 2=0 then s:=s+i;
b)
s:=O;
for i:= n downto 2 do
if i mod 2=0 then s:= i;
c)
s:=O;
for i: = 1 to n div 2 do
s:=s+2*i;
d)
s:=O;
for i :=(n-1) downto 2 do
if i mod 2=0 then s:=s+i;
a)
s=O;
for (i=l; i<=n; i++)
if (i%2==0) s+=i;
b)
s=O;
for (i=n; i>=2; i--)
if (i%2==0) s=i;
c)
s=O;
for (i=l; i<=n/2;i++)
s+=2*i;
d)
s=O;
for{i=n-1; i>=2; i--)
if (i%2==0) s+=i;
37
28. Care dintre FOR permit a tuturor numerelor
impare mai mici sau egale cu n?
29. Care dintre FOR permit unor caractere dispuse pe mai
multe linii sub forma unui triunghi?
a)
for i ;= 1 to n do begin
write(i); i:=i+2;
end;
b)
for i ;= n downto 1 do
if i mod 2=1 then write(i);
c)
for i = O to (n-1) div 2 do
write(i*2+1);
d)
for i = 1 to n div 2 do
write(i*2+1) ;
a)
for i := 1 to 5 do begin
writeln;
for j:=1 to i write(i);
endi
b)
for i ;= 1 to 5 do
for j:=1 to i begin
write(i);
writeln;
endi
c)
for i ;= 1 to 5 do begin
writelni
for j:=1 to i
writeln(i) ;
endi
d)
for i := 1 to 5 do begin
write;
for j:=1 to i begin
writeln(i);
end;
a)
for (i=1; i<=n; i+=3)
cout ii
b)
for (i=n; i>=1; i--)
if (i%2==1) cout i;
c)
for (i=O; i<=(n-1)/2;i++)
cout 2*i+1;
d)
for (i=1; i<=n/2i i++)
cout 2*i+1;
a)
for (i=l; i<=5; i++) {
cout endl;
for (j=1; j<=i; j++) cout
}
b)
for (i=1; i<=5; i++)
for (j=1; j<=i; j++)
cout i;
cout endl;
}
c)
for (i=1; i<=5; i++) {
cout endli
for (j=1; j<=ii j++)
cout i endl;
d)
for (i=1i i<=5; i++) {
for (j=1; j<=i; j++)
cout i endli
38
33. Ce se va la executarea
31. Ce se va la executarea
30. Ce se va la executarea
d) 3 3
d) 96 2
d) 2 3 4 O
d) 1 2 4 5 6
b)
a=12;
while (a%10>0)
caut a;
a/=10i
}
a)
x=l; k=2*x;
while (k>O) {
caut k+Xi
k/=l;
}
c ) 320 O
x=32034;
while (x%10>0) X/=10i
caut x ' , (x/10) %10 i
c ) 96.0 2.0
X=3.00i
y=2.00;
while (x*y<100) X*=Yi
printf("%2.0f %2.0f", x, y);
c) 1 3 4 6 7
a=l;
while (a%5!=0)
caut a%5;
a++;
c ) 1 2 3 4
k=l;
while (k<=7) {
caut k ' ';
if (k%2==1) k+=2; else k++;
}
39
b) 320 2
b) 48.0 2.0
b) 1 2 3 4 O
b)
a:=12;
while a mod 10 <> O do begin
write(a) i
a:=a div 10i
end;
a) 3 O
a)
x:=l; k:=2*x;
while k>O do begin
write (k--x) i
k:=k div 1;
endi
x:=32034;
while x mod 10<>0 do
x:=x div 10;
write(x,' " x div 10 mod 10);
a) 48 2
a) O 1 2 3 4
x:=3.00;
y:=2.00;
while x*y<100 do x:=x*y;
write(x :2 :0,' ',y :2 :0);
.:
34. care dintre un infinit de
32. Ce se va la executarea
a:=l;
while a mod 5 <>0 do begin
write(a mod 5);
a:=a+1;
end;
a) 1 2 3 4 5 6 7 b) 1 3 5 7
k:=l;
while k<=7 do begin
write(k,' ');
if k mod 2 = 1 then k:=k+2
else k:=k+1; end;
35. Ce se va la executarea
38. Ce se va la executarea
37. Ce se va la executarea
d) 24816
d) 24816
d) 1 2 3 6 7
d)O 10 2 8 4 6 6 4
c ) 2 4 8 16
a=2;
do {
printf("%2d", a);
a*=a;
} while (a<=20);
d)
a=l;
while (a%10==5)
cout a;
cout a/10;
}
c) 1 2 4 6
c)
x=231;
while (x!=5)
cout x;
x*=x%10;
}
j=l;
do {
cout j ' ';
if (j%2==0) j++;
else j*=2;
} while (j<=10);
c ) 2 4 8 16
p=l;
do {
p*=2;
cout p;
} while (p%10!=6);
a=O; b=10;
do {
a+=2; b-=2;
cout a ' , b ' ';
while (a<=b);
40
b) 2 416
b) 1 3 6
b) 2486
b) O 10 2 8 4 6 c ) 2 8 4 6
a) 2 4 816
a:=2;
repeat
write(a:2) ;
a:=sqr(a);
until a>20;
a) 1 2 3 6
j: =1;
repeat
write(j, , ');
if j mod 2 =0 then j:=j+1
else j:=j*2;
until j>10;
a) 2 4 8 6
p:=l;
repeat
p:=p*2;
write(p) ;
until p mod 10=6;
36. Ce se va la executarea
a) 2 8 4 6 6 4
a:=0;b:=10;
repeat
a:=a+2; b:=b-2;
write(a, , ',b,' ');
until a>b;
end;
d)
a:=l;
while a mod 10 = 5 do begin
write1n(a) ;
write(a div 10);
c)
x:=231;
while x<>5 do begin
writeln(x) ;
x:=x * (x mod 10);
end;
39. care dintre un infinit de
a)
j:=1234;
i:=10;
repeat
write(j) ;
j:= i div 10;
until j>10;
b)
a:=2;
repeat
a:=a*2;
writeln (a) ;
until a>20;
c)
a:=2;
repeat
writeln(ai';
if a <1000 then a:=a*2;
until a<l;
d)
a:=l;
repeat
write(a) ;
a:=trunc(sqrt(a));
until a>O;
a)
j=1234;
i=10;
do {
caut j;
j=i/10;
} while (j<=10);
b)
a=2;
do {
a*=2;
caut a endl;
} while (a<=20);
c)
a=2;
do {
caut a endl;
if (a<1000) a*=2;
} while (a>=l);
d)
a=l;
do {
caut a;
a=(int)sqrt((dauble)a) ;
} while (a<=O);
1.2.2 Teste cu itemi semiobiectivi
1. Se algoritm reprezentat n pseudocod:
intreg a, b ,c, i ;
citeste a,b
c ..... O;
l
p e n t ru i ..... a, b executa
raaca i mod 2=0 atunci
l.. c ..... c + 1;
C
a c a c > O atunci scrie c
altfel scrie "Nu exista"
stop.
41
a) Ce se va pentru valorile a=3
b=lO ? Dar pentru a=4 b=12?
b) un exemplu de valori pentru
datele de intrare astfel nct algoritmul
mesajul Nu exista
c) un de a
rezolvare este algoritmul prezentat.
d) programul Pascal/C/C++
algoritmului prezentat.
2. Se algoritm reprezentat n pseudocod:
a) Ce se va pentru n=3?
b) De cte ori contorul i va lua valoarea
n?
c) De cte ori contorul j va lua valoarea
n?
d) programul Pascal/C/C++
algoritmului prezentat.
e) un de a
rezolvare este chiar algoritmul
a) Ce se va pentru de valori 1,
2,3 ?
b) un exemplu de set de date de
intrare pentru care se vor trei valori
multipli de 3.
c) De cte ori se de
atribuire s +- S + x ?
d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce se va pentru de valori 6,
5,4,2, l?
b) un exemplu de set de date de
intrare pentru care se vor cinci
valori consecutive.
c) De cte ori se de
atribuire s +- S + x ?
d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce se va pentru n=4 de
valori 3, 5, 6,10 ?
b) un exemplu de set de date de
intrare pentru care se va valoarea O.
c) un exemplu de set de date de
intrare pentru care se va suma celor
n numere citite.
d) programul Pascal/C/C++
algoritmului prezentat.
42
j
3 executa
O;
2 executa
intreg i, j, s, X
pentru i _ 1, 5 executa
citeste X; s O;
rpentru j - 1, i executa
4. s - s + X;
scrie s;
intreg X, s, i,
pentru i _ 1,
citeste X; s
rpentru j - 1,
4. s - s + X;
scrie s;
intreg n, x, nr, i ;
citeste n
nr _ O;
[
ent ru i - 1, n executa
citeste X;
raaca (x<n)or(x>2*n) atunci
l. nr - nr + X;
scrie nr;
stop.
intreg i, j, n ;
citeste n;
l
pent ru i - 1, n executa
rpentru j - 1, n executa
4. scrie (i-1)*n + j;
stop.
4. Se algoritm reprezentat n pseudocod:
5. Se algoritm reprezentat n pseudocod:
3. Se algoritm reprezentat n pseudocod:
6. Se algoritm reprezentat n pseudocod:
a) Ce se va pentru de valori 2
465743 O?
b) un exemplu de de valori
pentru care se valoarea O.
c) un exemplu de de valori
pentru care valoarea va fi
cu de numere introdus.
d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce se va pentru x=2?
b) Ce valori poate lua la intrare x pentru
ca la final se 10?
c) un exemplu de valoare pentru x
astfel nct la final nu fie o
valoare cu 10.
d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce se va la introducerea
de valori 2 4 5 7 4 O?
b) un exemplu de valori pentru
datele de intrare astfel nct algoritmul
valoarea O.
c) un de a
rezolvare este algoritmul prezentat.
d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce se va x=7? Dar pentru
x=13 ?
b) un exemplu de valoare x astfel
nct se valoarea 1.
c) un de a
rezolvare este algoritmul prezentat.
d) programul Pascal/C/C++
algoritmului prezentat.
43
2 atunci
atunci
Yi
O
O executa
stop.
x ... Yi
intreg x, nri
citeste Xi
nr .... O)
[
at timp" X i O executa
raaca x mod 2=1 atunci
la nr ... nr + li
x ... xt1iv 2i
scrie nri stop.
intreg XI nr,
citeste Xi nr
cat timp X i
citeste Yi
Fca X mod 2=y mod
la nr ... nr + li
intreg a, nri
citeste ai
nr ... Oi
[
at timp a i O executa
raaca a mod 2=0 atunci
la nr ... nr + li
citeste ai
scrie nri stop.
intreg x, nri
citeste Xi nr ...0

5"0
la nr .... nr + li
pana cand nr = 2
scrie Xi
stop.
9. Se algoritm reprezentat n pseudocod:
8. Se algoritm reprezentat n pseudocod:
7. Se algoritm reprezentat n pseudocod:
10. Se algoritm reprezentat n pseudocod:
a) Ce se va pentru de valori 4
65 11 15?
b) un exemplu de de valori
pentru care se valoarea O.
c) Ce valoare trebuie la intrare x
pentru ca structura efectueze 3

d) programul Pascal/C/C++
algoritmului prezentat.
a) Ce valori vor fi se vor
introduce, n ordine, numerele:
2,3,4,5, O;
b) un set de date de intrare
pentru care ultimele numere
fie egale.
c) algoritmul,
noi variabile sau
astfel nct se succesiv media
a numerelor citite.
a) Ce valoare va fi pentru n= 5
numerele:222, 2043, 29, 2, 20035.
b) un set de date de intrare
pentru care valoarea va fi
cu suma numerelor citite?
c) programul Pascal/C/C++
algoritmului prezentat.
d) repetitive ale
algoritmului folosind numai
posterior.
a) Ce se va pentru valoarea n=4?
b) un nou algoritm care va
pe ecran imaginea
de axa a
celei descrise de algoritm.
c) programul Pascal/C/C++
algoritmului prezentat.
d) un nou algoritm care va
imaginea de axa
atunci
executa
n-i+1/n executa
S s + x*nr;
44
x x - li
pana cand x=O i
scrie nri stop.
intreg x, nri
citeste Xi nr O i
repeta
citeste Yi
raaca (y>1)and(y<10)
la. nr nr + li
intreg ni i, nr, X, Si
citeste ni S .... O;
entru i .... 1, n executa
nr .... 1; citeste Xi
[
a t timp X > 9 executa
nr nr * 10;
x [x / 10];
intreg X, p, ii
i .... Oi P .... 1;
citeste Xi
[
a t timp (xi'O)
i i + 1;
P .... P * x;
citeste Xi
scrie Pi
scrie ii
stop.
intreg n,i,ji
citeste ni
entru i 1, n executa
rpentru j 1, n-i executa
t.. scrie \ 'i
r
n t ru
j
ls scrie ,* I i
scrie salt la linie noua
12. Se algoritm:
13. Se algoritm:
11. Se algoritm:
14. Se algoritm:
intreg n,x,nr,j; logic ok;
citeste n :
nr O; x n; ok True;
l
r e p e t a
nr nr*lO + n mod 10
n [n / 10];
pana cand n=O;
j 2, executa
l.G:aca nr%j=O atunci
t
a c a ok atunci
scrie nr/x {cu 2 zecimale}
altfel
scrie x/nr {cu 2 zecimale}
a) Ce valoare va fi pentru n= 31?
b) o valoare a lui n pentru
care se o egalitate ntre valoarea
datei de cea de intrare.
c) programul PascaI/C/C++
algoritmului prezentat.
d) repetitive ale
algoritmului folosind numai
anterior.
e) valori ale datei de
intrare cu proprietatea: ambele vor
conduce la valorii 1.00, dar din
considerente diferite.
45
16. Se algoritm:
a) Ce valori vor fi pentru n= 5
numerele: 322,3043,39,9, 30035 ?
b) Pentru n=4, un set de date
de intrare astfel nct una din valorile
fie -1?
c) programul Pascal/C/C++
algoritmului prezentat.
d) algoritmul astfel nct fie
de al celei mai
mari cifre a numerelor
introduse.
a) Ce valori vor fi pentru n= !O?
b) o valoare pentru care nu
se va face nici o
c) o valoare pentru care vor
fi trei perechi de numere.
d) programul Pascal/C/C++
algoritmului prezentat.
e) algoritmul a introduce
noi sau variabile astfel nct
o pereche de numere nu fie de
ori.
n o
cu scopul de a elimina inutile
ale algoritmului.
intreg n ,i ,j; logic ok;
citeste
pentru i 2, n-2 executa
ok True;
j 2, executa
i % j=O atunci

..... tru j 2,
raaca (n-i) mod j = O atunci
l.ok False;
G:aca ok atunci scrie i, n-i;
intreg n, i, max1, max2, x, c;
citeste n;
max1 -1; max2 -1;
pentru i 1, n executa
citeste x; c x mod 10;
aca c > max1 atunci
max2 maxl; maxl c;
altfel

t:tunci max2 C;
15. Se algoritm:
2. se determine cel mai mic care se poate forma cu cifrele unui natural citit
de la Exemplu: pentru nr=30027 se va 20037
Solutie: Algoritmul cifre n ordine
de la 9 la O a acestora.
#include <iastream.h>
long nr,x,i,w,apO,ap,c;
void main() {
cinnr; w=O;
for (c=O; c<=9; c++) {
}
}
#include <iastream.h>
long nr,x,i,ap,c;
void main(){
cin nr;
for (c=9; c>=O; c--) {
x=nr;
ap=O;
do {
if (x%lO==c) ap++;
x=x/10;
} while (x>O);
for (i=l; i<=ap; i++)
caut c;
1.2.3 Probleme rezolvate
a) Ce valori vor fi pentru n=5
numerele: 542, 32103, 3, 91, 21035
b) Pentru n=4, un set de date
de intrare format din valori distincte
pentru care toate valorile fie
egale?
c) programul Pascal/C/C++
algoritmului prezentat.
d) algoritmul astfel nct
doar repetitive
anterior.
46
var nr,ap,apO,x,i,c,w:langint;
begin
readln(nr); w:=O;
for c:=O to 9 do begin
x:=nr; ap:=O; apO:=O;
var nr,ap,x,i,c:langint;
begin
readln (nr) ;
for c:=9 downto O do begin
x:=nr;
ap:=O;
repeat
if x mod 10 = c then
inc (ap);
x:=x div 10;
until x=O;
for i:=l to ap do write(c);
end;
end.
intreg n, i, C, Xi
citeste n;
entru i l,n executa
citeste x;
c O;
[
ep e t a
c c*lO + x mod 10;
x [x / 100]
pana cand x = O;
scrie c;
Solutie: Algoritmul cifre de la O la 9 efectundu-se
succesiv. Cifrele egale cu Ovor fi numai o
1. se determine cel mai mare care se poate forma cu ajutorul cifrelor unui
natural citit de la Exemplu: pentru nr=30027 se va 73200
17. Se algoritm:
repeat
if x mod 10 c then
inc (ap) ;
if x mod 10 O then
inc (apO) ;
x:=x div 10;
until x=O;
if (c<>O)and(ap>O) then begin
if w=O then begin
write(c) ;
for i:=l to apO do
write(O) ;
dec(ap) ;inc(w);
end;
for i:=l to ap do write(c);
end;
end;
end.
x=nr; ap=O; apO=O;
do {
if (x%10==c) ap++;
if (x%10==0) apO++;
x=x/10;
} while (x>O);
if (ci=O && ap) {
if (iw) {
caut c;
for (i=l; i<=apO; i++)
caut O;
ap--; w++;
}
for(i=l; i<=ap; i++)
caut c;
}
}
}
3. Se un real pozitiv citit de la se un program care
partea a acestuia la cel mai apropiat ntreg divizibil cu 1O
P
, unde p este o
din baza 10. Se de cifre ale lui nr este mai mare dect p,
Exemplu: pentru 13087.3 si p=2se va 13100.3
Solutie: Algoritmul partea a dat. Se valoarea lOP,
iar restul modulo 10P tipul rotunjirii: prin adaos sau trunchiere.
var nr,f:real;
i,ex,x,p:longint;
begin
readln(nr);
readln (p) ;
x: =trunc(nr) ;
f: =frac (nr) ;
ex:=l;
for i:=l to p do ex:=ex*lO;
if x mod ex>5*(ex div 10)then
x:=x+(ex-x mod ex)
elae
x:=x-x mod ex;
nr:=x+f;
writeln(nr:0:2);
end.
#include <stdio.h>
#include <math.h>
float nr,f;
long i,p,x,ex;
void main(){
scanf ("%f%ld", &nr, &p) ;
x=(long)nr;
f=nr-(float)xi
p=powlO (p) ;
if (x%p>5*(p/10)) x+=p-x%p;
elae X-=X%Pi
nr=(float)x+f;
printf("%.2f\n",nr) ;
4. un program care primeste un real pozitiv i partea
astfel nct cifrele un monoton.
Exemplu: 3.563289 devine 3.56.
Solutie: Algoritmul o a cu 10 ct timp cifra zecilor
cifra curente monotonia Variabila okl monotonia
iar ok2 monotonia n final, este la 10 de tot attea ori de
cte ori a fost
47
Solutie: Numerele vor fi descompuse succesiv n factori primi caz,
actualizarea valorii cu maxim de factori
5. Se un de n numere naturale. se din a
descompunere un maxim de factori primi
Exemplu: pentru n=4 numerele 23 21 6071 se va 60 trei factori primi
2
2*3*5)
}
}
cout maxni
}
#include <iostream.h>
long n,maxf,maxn,nrf,xx,f,i,Xi
int Oki
void main() {
cin ni maxf=Oi
for(i=li i<=ni i++)
nrf=O; f=2;
cin Xi XX=Xi
do {
ok=O;
while (x%f==O)
x=x/f;
ok=li
}
f++i
if (ok) nrf++i
}
while (n>=f);
if (nrf>maxf)
maxf enr f :
maxn=xx;
}
X=y/10i
for (k=li k<=ii k++) X/=10i
printf("%.*f", (int)i,x)i
)
#include <stdio.h>
#include <math.h>
float Xi
long i,k,ok1,ok2,Yi
void main() {
scanf("%f" ,&x) i
x=X*10.0i i=li
y=(long) (x*10.0) i
ok1=(y%10) > (y/10%10) i
ok2=ok1i
while (ok1==ok2) {
i++i
x*=10.0i y=(long) (x*10.0) i
ok2=(y%10) > (y/10%10) i
48
1 var x:reali
2 i,k,y:longinti
3 ok1,ok2:booleani
begin
readln(x) i
x:=X*10i i:=li
y:=trunc(x*10)i
ok1:=y mod 10>y div 10 mod
10i
ok2:=ok1i
while ok1=ok2 do begin
12 inc (i) i
13 x:=X*10i y:=trunc(x*10) i
14 ok2:=y mod 10>y div 10 mod 10i
15 endi
16 x:=y div 10i
17 for k:=l to i do x:=X/10i
18 writeln(x:O:i)
19 end.
20
1 var
2 n,maxf,maxn,nrf:longinti
3 xx,f,i,x:longinti
4 ok:booleani
5 begin
6 readln(n)i maxf:=Oi
7 for i:=l to n do begin
8 nrf:=Oi f:=2i
9 readln(x)i XX:=Xi
10 repeat
11 ok:=falsei
12 while X mod f=O do begin
13 x:=x div fi
14 ok:=truei
15 endi
16 inc(f) i
17 if ok then inc(nrf)i
18 until n<fi
19 if nrf>maxf then begin
20 maxf:=nrfi
21 maxn: =xx i
22 endi
23 endi
24 writeln(maxn)i
25 end.
6. Se un de n numere naturale. se
care se poate forma din minim maxim din
Exemplu: pentru n=4 numerele 3 2 5 8 se va 1/4.
Solutie: Se minimul maximul din Pentru a sub
vom numitorul la c.m.m.d.c.
var i,min,max,x,y,n:longint;
begin
readln(n) ;
readln(min) ;
max:=min;
for i:=l to n-l do begin
readln(x) ;
if x<min then min:=x;
if x>max then max:=x;
end;
x: =mi,n;y: =max;
while,x<>y do
if x>y then x:=x-y
else y:=y-x;
write(min div x, '/' ,max div x)
end. "
#include <iostream.h>
long i,min,max,x,y,n;
void main() {
cin n min; max=min;
for (i=l;i<n;i++){
cin x;
if (x<min) min=x;
if (x>max) max=x;
}
x=min; y=max;
while (x! =y)
if (x>y) x-=y;
else y-=x;
cout min/y "/" max/y;
7. Se un natural de cel mult 8 cifre. se formeze un alt din cifrele
situate pe impare (de la stnga spre dreapta).
Exemplu: pentru 1234 se va 13.
Solutie: citirea n se va forma oglinditul acestuia notat cu x (cu cifrele de la
dreapta spre stnga). n final, se va forma din cifrele lui x situate pe
impare, ncepnd cu cifra
var n,x:longint;
begin
readln(n); x:=o;
repeat
x:=x*lO+n mod 10
n:=n div 10;
until n=O;
repeat
n:=n*lO+ x mod 10;
x:=x div 100;
until x=O;
write(n) ;
end.
#include <iostream.h>
long n,x;
void main() {
cin n; x=O;
do {
x=x*lO + n%lO;
n=n/10;
} while (n!=O);
do {
n=n*10 + x%10;
x=x/100;
} while (x!=O);
caut n;
8. Se un ntreg citit de la se cel mai apropiat
prim de acesta.
Exemplu pentru n=22 se va 23, iar pentru 20 se va 19.
49
50
Solutie: Se perechi de numere (i,j) verificndu-se suma numerelor dintre ele
este chiar n, (j+i)*(j-i+ 1)12=n.
#include <iostream.h>
long i,j,k,ni
void main() {
cin ni
for (i=li i<=n/2; i++)
for (j=i+l; j<=ni j++)
if((j+i)*(j-i+l)/2==n)
for (k=i; k<j; k++)
cout k "+";
cout j"="n endli
#include <iostream.h>
void main() {
long i,x,nl,n2,oki
cin Xi
nl=xi
do {
nl++i ok=li
for (i=2i i*i<=nli i++)
if (nl%i==O) Ok=Oi
} while (!ok) i
n2=x+li
do {
n2--i ok=li
for (i=2i i*i<=n2i i++)
if (n2%i==O)
Ok=Oi
} while (! ok) i
if (x-n2<nl-x)
cout n2i
else cout nli
end,
var i,j,k,n:longinti
begin
readln(n) i
for i:=l to n div 2 do
for j:=i+l to n do
if (j+i)*(j-i+l)/2=n then
begin
for k:=i to j-l do
write(k, '+') i
writeln(j, '=',n) i
endi
end.
var i,x,nl,n2:1onginti
ok:booleani
begin
readln(x) i nl:=Xi
repeat
inc (nl) i
ok:=truei
for i:=2 to trunc(sqrt(nl))
do
if nl mod i=O then
ok:=falsei
until Oki
n2:=x+li
repeat
dec(n2) i
ok:=truei
for i:=2 to trunc(sqrt(n2)) do
if n2 mod'i=O then
ok:=falsei
until Oki
if x-n2<nl-x then writeln(n2)
else writeln(nl) i
9. n toate modurile posibile ca de numere naturale consecutive, un
natural citit de la
Exemplu: Pentru n=9 se va 5 + 4; 2 + 3 + 4.
Solutie: Se att prim cel mai mare mai mic dect n cel mai mic mai
mare dect n se va cel mai apropiat. Pentru aceasta s-au folosit structurile repetitive
posterior al test identificarea unui prim.
10. Se un de n (n<10) numere naturale. se verifice format din
primele cifre ale acestora este un palindrom. Exemplu: pentru n=5 numerele 123, 435,
92,4002, 10 se 14941 care este palindrom.
Solutie: Se succesiv cifrele semnificative ale numerelor din prin la
10 cnd se ajunge la valori mai mici sau egale cu 9. Cu aceste cifre se un
nou care se este palindrom.
var nr,nr1,nr2,n,x,i:longint;
begin
readln(n); nr:=O;
for i:=l to n do begin
readln(x) ;
while x>9 do x:=x div 10;
nr:=nr*10+x;
end;
nr1:=nr; nr2:=0;
while nr1<>0 do begin
nr2:=nr2*10+nr1 mod 10;
nr1:=nr1 div 10;
end;
if nr2=nr then
writeln(nr, 'este palindrom')
else
writeln(nr, 'nu e palindrom')
end.
#include <iostream.h>
long nr,nr1,nr2,n,x,i;
void main() {
cin n; nr=O;
for (i=l; i<=n; i++)
cin X;
while (x>9) x/=10;
nr=nr*10+x;
}
nr1=nr; nr2=Oi
while (nr1!=0) {
nr2=nr2*10 + nr1%10;
nr1/=10i
}
if (nr2==nr)
coutnr"este palindrom" i
else
coutnr"nu e palindrom"i
11. Se un natural de cel mult 8 cifre. se scrie acest ca
doar din termeni egali cu 3 5. n n care nu se va
mesajul "IMPOSIBIL".
Exemplu: pentru n=7 se va IMPOSIBIL iar pentru n=16 se va 5+5+3+3;
algoritmul de rezolvare al problemei termenilor egali cu 5 astfel
nct restul fie divizibil cu 3. n caz contrar problema nu admite
var x,n5,n3,i:longinti
begin
read(x)i n5:=Oi n3:=0;
while (X mod 3<>0)and(x>=5)do
begin
inc (n5) i
X:=X-5i
endi
n3:=x div 3;
if x mod 3<>0 then
write('IMPOSIBIL')
else begin
for i:=l to n5 do
write(5, '+');
for i:=l to n3 do
write(3, '+') i
write(#8,' 'li
endiend.
#include <iostream.h>
long x,i,n3,n5i
void main() {
cin Xi n5=Oi n3=Oi
while (x%3 && x>=5) {
n5++i
X-=5i
}
n3=x/3i
if (x%3)
cout "IMPOSIBIL"i
else {
for (i=l; i<=n5i i++)
cout 5 "+"i
for (i=l; i<=n3; i++)
cout 3 "+"i
}
}
12. un program care pe ecran Il caractere "*,, sub forma unui
triunghi isoscel (trapez) ca n exemplul
51
Solutie: problema admite n poate fi scris ca de numere pare sau
ca de numere impare deci trebuie respecte una din forme: Il=k*k
sau n=k*k+k;
Pentru n=5 se va IMPOSIBIL.
problemei este ca primul rnd unul sau cel mult caractere, iar
fiecare linie difere de precedenta prin exact caractere.
Cazul a)
n= 2+4+6+...+2*k= 2*(l+2+3+...+k)= 2*k* (k+l)I2= k* (k+I)= k*k+k, unde k va
reprezenta de linii pe care se va face
Pentru n=I2 se va
**
****
******
#include <iostream.h>
#include <math.h>
long n,k,i,j,l,ll,ok;
void main() {
cin n;
k=(int} sqrt(n); ok=O;
if (k*k==n) {
1=k-1; 11=1;
ok=1;
}
else if (k*k+k==n)
1=k-1; 11=2;
ok=1;
}
if (ok) {
for (i=1; i<=k; i++) {
for (j=l; j<=l; j++)
cout II Il;
for (j=1; j<=11; j++)
cout 11*11;
cout endl;
1--; 11+=2;
}
}
else cout "IMPOSIBIL";
52
***
*****
*******
Pentru n=I6 se va
*
var n,k,i,j,l,ll:integer;
ok:boolean;
begin
write{ 'N = '}; readln(n};
k:=trunc(sqrt(n)};
ok:=false;
if k*k=n then begin
1:=k-1;
11:=1;
ok:=true;
end
else
if k*k+k=n then begin
1:=k-1; 11:=2;
ok:=true; end;
if ok then begin
for i:=1 to k do begin
for j:=1 to 1 do
write (' ');
for j:=1 tq 11 do
write ( '*') ;
writeln;
1:=1-1; 11:=11+2;
end;
end
else writeln(IIMPOSIBIL '};
end.
Cazul b)
n=1+3+...+2*k+l= (1+2+3+...+2*k+l)-(2+4+6+...+2*k)= (2*k+l)*(2*k+2)/2-k*(k+l) =
k*k+2*k+l=(k+l)*(k+ 1) unde k+1 de linii pe care se va face
1.2.4 Probleme propuse
1. un program care, pentru un natural n produsul primelor n
numere naturale pare. Algoritmul va fi reprezentat n pseudocod.
Exemplu: Pentru 11=2 se va 8 2*4
2. un program care de la n numere naturale media
a numerelor prime.
Exemplu: Pentru 11=3 numerele 4, 5 7 se va 6.00
3. Citind de la n numere naturale se calculeze produsul celor care sunt prime cu
11.
Exemplu: Pentru n=3 numerele 4, 5 6 se va 20
4. Pentru un Il se ultimii p divizorii proprii ai de de el
n are mai de p divizori se vor
Exemplu: Pentru n=24 p=2 se va 8 12
5. un program care media a tuturor numerelor palindrom din
intervalul [a.b].
Exemplu: PentruneS b=13 se va 9.33
6. un program care permite primelor n puteri ale lui 2 care
intervalului [x,y).
Exemplu: Pentru n=2 intervalul [5,40],se va 8 16
7. un program care permite valorilor expresii, n care 11 este
un natural strict mai mic ca 9, citit de la
El=12 + 23 + 34 +...+ n(n+l)
E2=1+12+123+1234+... +12...11.
8. Se un 11 citit de la un program care
pe ecran a unor caractere dispuse ca n exemplul
Exemplu: pentru 11 = 5 se va
a) b) e) d)
* * * * * * * * * * *
1
* * * * * * * * * * *
1 2
* * * * * * * * * * *
1 2 3
* * * * * * * * * * *
1 2 3 4
* * * * * * * * * * *
1 2 3 4 5
9. un program care de la 11 numere naturale nenule32000)
format prin alipirea cifrelor maxim cu cel minim (n
ordine).
Exemplu:
Pentru 11=3 numerele 63, 153 62 se va 15362
53
10. Cunoscndu-se limitele ntregi a, b ale unui interval un de n valori, se realizeze
un program care media a numerelor citite, pentru care suma cifrelor
intervalului [a,b].
Exemplu: Pentru a=2, b=10, n=5 valorile 11,39,32,80,84 se va 41.00.
11. se realizeze un program care pe ecran toate de scriere a valorii
8 ca de trei termeni r.enuli
Exemplu : Pentru 8=8 se va
8=1 + 2 + 5
8=1 + 3 + 4
12. Se de la un de n numere. un program care
format din cifrele acestora este un prim.
Exemplu: Pentru n=4 numerele 237 23 453 11 se va 7331 este prim.
13. Se citesc de la n numere naturale. de triplete de valori citite
consecutiv care pot reprezenta laturile unui triunghi.
Exemplu: Pentru n=5 valorile: 10,3,4,5,7 se va 2 (3, 4, 5 4,5,7)
14. se toate tripletele de numere pitagoricemai mici dect un n dat.
15. Se citesc de la a n obiecte de o Valorile citite
sunt distincte. se celor mai scumpe obiecte
Exemplu: Pentru n=5 valorile 18000, 230, 190000, 2400, 2000000 se va 190000
2000000
16. Se cunosc notele a n elevi la un extemporal. se care este nota la test
de elevi a fost
Exemplu:
Pentru n=7 notele: 4, 6, 4,8,8,5,8, se va 'Nota 8 de 3 elevi'.
17. Pentru fiecare elev din cei n ntr-o se cunosc cele note la
un program care media pe la
elevilor media n Notele de un elev
vor fi citite succesiv.
Exemplu:
Pentru n=3 notele: 8,6,8, 10,8,8 se va
'Media clasei este 8, Nici un elev corigent, Media maxima este 9'
18. Citind de la n numere naturale, se calculeze media a lor.
medie se formula:
12
1 1 1
-+-+... +--
nrl nr2 nrN
19. Se un de n perechi de numere naturale care limitele ntregi ale
unor intervale. Citirea intervalelor se face n ordine a limitelor inferioare ale
intervalelor. un program care
54
de intervale disjuncte cu primul interval citit.
de intervale incluse n primul interval citit.
Exemplu: Pentru n=5 intervalele: (2,6) (3,7) (3,5) (10,12) (15,29) se va 2 1
intervale disjuncte cu (2,6) un interval inclus n (2,6))
20. se cele mai mari numere prime strict mai mici dect natural n
(n>4).
Exemplu: Pentru n=19 se va 13 17
21. Se un n citit de la se realizeze un program care pe
ecran cifrele pare ale acestuia n ordinea a separate prin cte o
ExempluPentru n=1234se va 4,2
22. Se un natural n. se formeze noi numere, unul format din
cifrele pare ale lui n, format din cifrele impare.
Exemplu: Pentru n=13854se va 84 135
23. Se un natural n (n>1000). se cele numere formate prin
scrierii zecimale a lui n.
Exemplu : se va 12 345. Pentru 11=182345 se va 182 345.
24. Se un natural n (n>100). se cifrele lui situate pe
impare ncepnd cu cifra Exemplu: Pentru n=1235 se va 52
25. Se un n natural (n>100). se suma primelor cifre ale lui
n.
Exemplu: Pentru 11=1235 se va 3
26. Se un Il natural. se cel mai mic multiplu par al
format din prima ultima a acestuia.
ExempLu: Pentru n=1235 se va 30
27. Se un natural n (n>1000). se format din cifrele pare
ale lui n situate pe impare ncepnd cu prima a sa.
Exemplu: Pentru 11=724582 se va 48
28. Se un natural n (Il> 1000). se de a cifrei
n scrierea lui Il.
Exemplu: Pentru 11=15535 se va 3 (5 apare de 3 ori)
29. Se un natural Il (n>lOOO). se cea mai mare care apare
n scrierea lui n de al ei.
Exemplu: Pentru 11=19539 se va "9 apare de 2 ori"
30. se toate numerele pare ncepnd cu valoarea 2, ct timp suma celor nu
este mai mare dect n natural citit.
Exemplu: n=15se va 2 4 6
55
31. Se de la un n impar. se primele n perechi de numere
consecutive a este cu n.
Exemplu: Pentru n=3 se va
12
45
78
32. Se un n. este palindrom se va format din
cifra zecilor cea a n caz contrar se va prima cifra a sa. Un este
palindrom este egal cu cu cifrele citite de la dreapta spre stnga.
Exemplu:
Pentru n=31413 se va 13 ;
Pentru 3214 se va 3
33. un program care citind de la un real, succesiv cte un
mai mic cu 2 dect ultimul ncepnd cu valoarea Lista ct timp
valorile sunt pozitive.
Exemplu: Pentru n=7.01 se va 7.01 5.01 3.01 1.01
34. Se citesc de la numere naturale n m. un program care
o de numere impare consecutive, ct timp dintre primul ultimul din
nu este mai mare dect m, Lista va ncepe cu primul impar mai mare dect n.
Exemplu:
Pentru n=7 m=50 se va 9 Il 13.....59
35. un program care, citind de la un n, puterile lui n mai
mici dect 30000.
36. un program care cifrele unui natural x n urma conversiei sale
n baza b (bs9).
Exemplu:
Pentru x=128 b=7 se va 242.
37. Se citesc de la numere. un program care l pe cel care
are un mai mare de cifre de 1 n scrierea n baza 2.
38. Se introduc de la numere, ct timp ultimul citit nu este egal cu suma
precendentelor se calculeze suma numerelor citite.
Exemplu: Pentru valorile 3, 5, 2, 4, 6 se va 20
39. Se de la un n. se pe o linie primele n numere
prime.
Exemplu: Pentru n=4 se va 2, 3, 5, 7
40. Se un n. format din primele lui cifre este perfect,
atunci se va total de cifre al lui n, n caz contrar se va de cifre
pare pe care le
56
Un este perfect suma divizorilor strict mai mici, este cu
respectiv: 6=1+2+3.
Exemplu:
Pentru n=28413 se va 5 ;Pentru 4914 se va 2.
41. Se de la un de n numere naturale. un program pentru
determinarea din cu cei mai divizori.
42. Se de la un de n numere reale. un program care
de al celui mai mare prim din
43. Se de la un de Il numere reale. un program care
suma a numere din Exemplu: Pentru n=4 valorile 8, 3, 8 5 se va
16.
44. Se de la un de Il numere naturale. un program care
total de cifre al tuturor numerelor prime din
45. Se un natural Il. se realizeze un program pentru determinarea
perechilor (a,b) de numere naturale (a,b ::;Il) ce au proprietatea a b sunt
prime ntre ele.
46. Se un natural n, (lOD::; Il), format din maxim 9 cifre. un
program care Il este "bine ordonat". Numerele "bine ordonate" sunt
cele care au proprietatea cifrele lor apar fie n ordine fie
47. se algoritmul care permite factorilor primi a puterilor la care
apar n descompunerea unui natural Il, dat.
48. Se introduc de la n numere ntregi. pe ecran cte dintre ele au suma
cifrelor cu de ordine avut la citire.
Exemplu:
Pentru 1l=5 numerele 2, 101,23,3001,234 pe ecran se va 2 (101 3001).
49. Se trei numere naturale Il, a b (a::;b:9I). se creeze un program care
permite factorilor primi ce intervalului (a, b) a puterilor la care
apar n descompunerea lui Il.
Exemplu: pentru 1l=36, a=1, b=10 se va
2 exponent 2
3 exponent 2
50. Se de la un de k intervale, pentru fiecare fiind introduse cele
limite [a.b] unde a<b numere ntregi. un program care
limitelor intervalului ce cele mai multe valori ntregi.
Exemplu:
Pentru k=4 de numere: 2648 3 225 10 se va intervalul (3 22).
57
51. un program care simuleze joc: doi parteneri introduc alternativ cte
un caracter de la Pierde acel care a introdus un caracter identic cu ultimul
introdus de el sau de partenerul
52. primele n perechi de numere prime consecutive pe numerelor impare.
Exemplu: pentru n=3 se va (3,5), (5,7) (11,13).
53. Se dau numere naturale nenule a n cu cel mult 10 cifre. Se cere se
ultima a puterii ati.
Exemplu: Pentru a= 1222223 n=180 se va 1.
54. Pentru n natural nenul cu cel mult 5 cifre se cere se determine n cte cifre de
Ose produsul 12 .. .-n.
Exemplu: pentru n=16 se va 3
55. toate numerele naturale nenule de la 1 la Il n ordine cte Il pe un
rnd (separate prin cte un
Exemplu: Pentru n=4 se va
1234
5678
91011 12
13 1415 16
56. Se dau numere naturale nenule cu cel mult 10 cifre. Se cere se cifrele
comune.
Exemplu: pentru numerele 12323234 657284 se va 24.
57. Fie cifre zecimale a b. De la se va introduce un de numere naturale,
citirea terrninndu-se cu o cu introducerea valorii O(care nu va face parte din
se de valori citite cu proprietatea au n scrierea succesiunea de
cifre ab.
Exemplu:
Pentru a=2, b=4 valorile 2342, 420, 8248, 15264, 24245, Ose va 2
58. Fiind dat un natural de maxim 9 cifre, de determine ntre care din cifre se
poate plasa operatorul de astfel nct produsul celor numere fie
maxim.
Exemplu:
Pentru valoarea 3203 se va 320*3 = 960.
59. Se citesc de la mai multe de numere ntregi, fiecare terrninndu-se cu
valoarea O. de citire se ncheie la introducerea valorii Ode ori consecutiv.
cel mai mare prim din fiecare
60. se primele n numere naturale care au cifra de control cu cifra x de
la Cifra de control a unui se prin nsumarea cifrelor din scrierea
a apoi se cifrele acestei sume, cnd suma
este printr-o De exemplu 28997 are cifra de control 9
(2+8+9+9+7=45,4+5= 9).
Exemplu: Pentru n=2 x=3 se va 3, 12
58
Exemplu: n=lO k=20.
Solutie: Se vor simula copilului respectnd regulile impuse n
1.3.1 Probleme rezolvate
poz;
intreg n, k;
citeste n, k;
poz +- O;
sens +- li
pentru i +- 1, k exeouta
poz +- poz + senSi
daoa (i mod 6=0) sau (i mod 10=7) atunci
sens +- sens * -1;
daoa (poz<l) sau (poz>n) atunoi
scrie O; stop.
Probleme de concurs ce date simple
se determine care este copacul n spatele se ascunde copilul la momentul
k<100.000. jocul a fost ntrerupt nainte sau la momentul k, atunci se va scrie valoarea
O.
De asemenea, jocul nostru este pus n afara de n
pomi, respectnd regula de deplasare copilul ar trebui se n spatele
copacului Osau n+1.
1. (Pomi - *) Se un de n<100.000 copaci cu numerele de la 11a n.
Un copil mai concepe un joc n primul minut al jocului
copilul se ascunde copacul 1, la minutul doi n spatele copacului 2, Sensul de
deplasare al copilului se minutul n care se este un divizibil cu 6
sau are ultima 7.
Minut Pom Minut Pom Minut Pom Minut Pom
1 1 6 6 11 9 16 6
2 2 7 5 12 10 17 5
3 3 8 6 13 9 18 6
4 4
1'"
9 7 14 8 19 5
5 5 10 8 15 7 20 4
2. de valori divizibile cu 3 -**) Fie de numere 1, 12, 123, 1234,
... 12345678910, .... Considerndu-se primele n numere ale acestui trebuie determinat
de numere care sunt divizibile cu 3.
Exemplu: Pentru n=5 se va 4.
59
60
n se va citi de la va avea maxim 6 cifre.
DA
NU
(n mod 3=1) atunci
3)+1;
sau
intreg n, i;
citeste n;
aca n < 9 atunci scrie O
altfel
aca n = 9 atunci scrie 8
altfel
scrie 72
rpentru i 1, n-10 executa
La scrie O
intreg n;
citeste n;
t
a c a (n mod 3=0)
scrie 2*(n aiv 3)
altfel
scrie 2*(n div
stop.
1
Solutie:
Se o pe care o numerelor divizibile cu 3 n dat, se
atunci cnd restul lui n este Osau 1 este 2*(n div 3), iar cnd restul
este 2 este 2*(n div 3)+1.
Solutie: de este ultimele 9 cifre, care ne ale unui sunt
doar de ultimele cifre ale ce va fi ridicat la Astfel, o
simpla pentru n=9 8 numere care ridicate la se n 987654321
(111111111, 888888889, etc.) Astfel pentru n>9 va fi 8*9*10
0

10
(prima
trebuie fie de O).
3. (987654321 - **) Pentru un n dat, trebuie un program care
cte numere de n cifre din baza 10 au proprietatea lor se n de
cifre: 987654321.
Solutie: Se fiecare citit se factori primi are se
mesajul
4. (Numere aproape prime - **) Definim un "aproape prim" un ntreg pozitiv care
poate fi scris ca produsul a numere prime. Dndu-se o de n<l1 ntregi
pozitivi de cel mult 9 cifre, un program care pentru fiecare dintre ele
mesajul "DA" este "aproape prim 'NU' n caz contrar.
Exemplu:
n=2
6
8
nr > 1 atunci c c + 1;
rdaca c = 2 atunci scrie "DA"
l:ltfel scrie "NU"
6
7
8
9
10
11
12
13
14
15
16
17
18
intreg n, it nr, Ci
citeste n;
pentru i 1, n executa
citeste nr; c O;
pentru d 2, executa
[
a c a nr mod d = O atunci
c c + 1;
rcat_tiIllp nr mod d = O
L. nr nr div d :
executa
S. (Trasarea liniilor - ***) Se o foaie de hrtie pe care Gigel va desena linii.
Trasnd o linie el mparte foaia de hrtie n zone. va trasa 2 linii el poate
2(linii suprapuse), 3 sau chiar 4 zone.
-8------11-
care este maxim de zone n care poate fi foaia de hrtie
trasnd n linii (0<n<35000).
Exemplu: Pentru n=3 se va 7
Solutie: am trasat k linii, putem trasa a k+l-a linie, astfel nct intersecteze toate
cele k linii trasate anterior, astfel formndu-se k+1 zone. Astfel, formula pentru
de zone va fi 1+1+2+3+ .. .+n=1+n*(n+l)/2.
intreg n;
citeste n;
scrie 1 + n*(n + 1) div 2;
stop.
6. - ***) de valori dintr-o de N numere
naturale cel mult egale cu 10.000, care ridicare la puterea M se vor divide cu K. (O <
N, M, K < 10.001)
Exemplu:
N=4 M=2 K=50
9 10 11 12
Solutie: Fiecare este ridicat la puterea M la fiecare pas restul la K,
nu ntregul Pentru a face ridicarea la putere eficient ne folosim de a
2p=(a
P)2
a2p+l=a*a2P.
61
62
N=7
113 1 2 1 1
1
2
intreg n, m, k, i, j/ nr, b, aux,rez;
citeste n, m, k;
rez +- O;
entru i +- 1,n executa
citeste nr;
aux +- nr; b +- O;
[
a t timp aux > O executa
aux +- aux div 2;
b +- b + 1;
aux +- 1;
[
ent ru j - b-l, O, -1 executa
aux +- (aux*aux) mod k;
rsaca bitul j al lui nr = 1 atunci
aux +- (aux*nr) mod k;
rsaca aux=O atunci
rez +- rez + 1;
intreg n,a,b,c,i;
citeste n;
a +- 1; b +- 1;
c:aca n 1 atunci scrie a;
c:aca n 2 atunci scrie b;
[
ent ru i +- 3, n executa
c +- a + b;
a - b;
b +- c;
scrie C; stop.
Solutie: Se de moduri n care se o cu N trepte este egal cu
de moduri n care se o scara cu N-l trepte (pas de 1) adunat cu de
moduri n care se o cu N-2 trepte. n concluzie, este cel de-al N-lea
termen al Fibonacci.
7. (Trepte- ***) O trebuie coboare o cu N<40 trepte numerotate 1,2, ...
N. la fiecare pas persoana poate coboare una sau trepte n cte
moduri poate cobor scara. Exemplu:
8. (Majoritar. ****) La alegeri au participat N<1.000.000 fiecare
votul sub forma unui care codul candidatului ales. se determine
un candidat care este majoritar, de ale codului este mai
mare dect N/2. Se presupune un astfel de candidat Exemplu:
N=3
Solutie: Vom parcurge o vom o c pentru candidatul
considerat curent majoritar nr de necontracarate ale candidatului. La
nceput primul element din este majoritar. La fiecare pas,
curent este egal cu candidatul sau nu de n de
asta. de ajunge la un moment dat 0, cu nu am
candidatul majoritar valoarea variabilei c cu curent citit.
intreg n, i, C, nri
citeste ni
c +- -1 i nr +- 1;
pentru i +- 1, n executa
citeste Xi
t
ac a X = c atunci
nr +- nr + li
altfel
nr +- nr - li
raaca nr = O atunci
l. c +- x; nr +- 1 i
0'
9. (Yirus ***) La laboratorul de genetice din Lugoj, n urma unor
un virus a suferit Ca urmare, trei tipuri de virusul (l
vom numi virus de tip A) tipuri de (i vom numi de tip B
de tip C). Pentru a studia comportamentul au izolat ntr-un
mediu steril un virus de tip A, un virus de tip B un virus de tip C au observat la
fiecare se produc
a orice virus de tip A se divide se un nou virus de tip A, un nou virus de tip B
un nou virus de tip C.
a dintr-un virus de tip B un virus de tip C se trei noi (unul de tip C doi
de tip B).
De asemenea, au observat nu mor.
se determine de de fiecare tip, N<26 secunde.
Exemplu:
N=2 I 4A 12B ac
(Concurs "Grigore Moisil", Lugoj 2001, c1s. V-VI)
Solutie: Se de timp de n secunde, determinnd la
fiecare moment din fiecare tip.
intreg n/i/a,b,ci
citeste ni
a +- li b +- li C +- li
[
ent ru i +- 1, n executa
b +- b + 2*c + ai
c +- 2*c + ai
a +- 2*ai
scrie a/b,ci stop.
63
Solutie: Se pas cu pas, adunnd la fiecare n secunde
de centimetri de
un program care Dl , Ni, D2, N2 1000) care de
din fiecare reorganizare, ct mai mare posibil cte
se n zona cte se n zona Soveja.
10. (Broasca. **) O se efectund cte o de lungime p cm la
fiecare fiecare 12 secunde devine mai iar lungimea
pe care o face se un program care numerele naturale mai mici
ca 30.000, p, 12, T - durata a n secunde care
pe care a parcurs-o cu doua zecimale. Se Tin < 16.
1.3.2 Probleme propuse
35750.00
executa
64
Nr. de cercetasi din fiecare
detasament: 9
Nr.de detasamente din Galaciuc:5
Nr. de detasamente din Soveja:4
(Olimpiada de Gimnaziu, 2001, cls. V)
(Olimpiada de Gimnaziu, 2001, cls. V)
intreg n, t;
real d, p;
citeste n, p, t;
d .... O;
[
a t timp n :o; t
d d + n*p;
p p*0.5;
t t - n;
d .... d + t*p;
scrie d;
stop.
Exemplu:
Dl=3
Nl=15
D2=2
N2=18
1. **) n zona Vrancea grupuri de cu sediul n
regiuni Soveja). din sunt n Di a
cte Ni fiecare. din Soveja sunt n D2 a cte N2
fiecare. n urma unui ordin de la Europeana a trebuie ca
toate din zona Vrancea fie formate din de
Pentru ndeplinirea ordinului, trebuie reorganizate din fiecare regiune, a
deplasa dintr-o regiune n alta.
Exemplu:
n=10
p=20
T=33
2. (La - **) Directorul unei premieze la anului pe cei
mai buni elevi la Pentru acest lucru el are de rezolvat probleme:
a) determine elevi vor fi dintre cei Il (2<=n<=700) elevi ai
aprinse cu profesori se n Consiliul Profesoral ca
lor fie n-k, unde k este cel mai mare perfect mai mic strict dect n.
De exemplu, pentru n=150, k este 144 (pentru ]44=12\ deci vor fi ]50-144=6
elevi.
b) Pentru a fi ct mai la premiere, n Consiliul Profesoral se ia decizia ca
elevii care nu vor fi fie pe terenul de SpOIt pe rnduri de cte p elevi
(unde p2=k). n acest scop, directorul a numerotat elevii nepremiati de la 1 la k a
ca elevii fie n ordinea a numerelor asociate.
un program care:
de la n, de elevi din
pe ecran de elevi
pe ecran modul de a elevilor
Exemplu:
n=35 Numarul de elevi premiati: 10
Elevii nepremiati:
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10 9 8 7 6
5 4 321
(Olimpiada de Gimnaziu, 2002, cIs. V)
3. - **) Se de numere naturale:
7,17,37,47,67,97,107,127,137,157, 167, ...
regula care sunt termenii si pe ecran al N-lea (N <
2001) termen din de mai sus.
Exemplu:
N=10 1157
(Concurs "Grigore Moisil", Lugoj 2001, cIs. V-VI)
4. (Balaur - **) A fost o un balaur cu 6 capete. ntr-o zi s-a i-a
un cap. Peste noapte i-au crescut alte 6 capete n loc. Pe gt! A doua zi,
Frumos iar i-a un cap, dar peste noapte balaurului i-au crescut n loc alte 6 capete ...
tot timp de n zile. n cea de a (n+l)-a zi, s-a plictisit a plecat
un program care de la 11, de zile, care pe ecran
cte capete avea balaurul n zile.
Exemplu:
n=3 I Balaurul are 15 capete
(Olimpiada de Gimnaziu, 2002, cls. V)
5. - **) Se un de N (l <=N<=30) elemente numere naturale (cu maxim
8 cifre). Se cere:
a) se cte elemente din sunt (numere care privite de la stnga sau
de la dreapta au cifrele n ordine De exemplu, 136 93 l sunt
b) se cea mai mare cea mai
la punctul a) sunt O atunci la b) se va mesajul NU EXISTA
65
Numarul de valori-panta: 4
Cea mai mare valoare-panta: 9621
Cea mai mica valoare-panta: 126
6 om
66
(Olimpiada de Gimnaziu, 2003, c1s. V)
1
2
(Olimpiada de Gimnaziu, 2003, cls. V)
(Olimpiada de Gimnaziu, 2002, cls. VI)
I Gigel are 2 ani,2 luni si 10 zile
(Olimpiada de Gimnaziu, 2002, cls. V)
Exemplu:
n=2
p=l
k=8
Exemplu:
N=69206400
8. (Pinochio - **) n fiecare zi ne din Pinochio spune cte o
nasul acestuia cu cte p<lOl centimetri pe zi.
cnd vine bunicul Gepeto pentru a nu-l prea tare, Pinochio nu
nici o ba chiar uitndu-se n n fiecare din aceste zile
lungimea nasului scade cu eate 1 centimetru pe zi. Cnd ncepe o
singur Pinochio minciunilor.
Care este dimensiunea nasului lui Pinochio k<257 zile nasul
n<IOOI centimetri?
7. (Exponent - ***) Se un natural n<IOI o k din {2, 3,5, 7}. Se
cere se exponentul lui k n descompunerea n factori primi a produsului} 2 3 ..: n.
Exemplu:
n=6
k=3
6. (Gigel - **) Gigel este un tip ciudat. Lui i place impresioneze colegii exprimnd
duratele numai n secunde. De exemplu, l vei ntreba ct e ceasul el va
cte secunde s-au scurs de la ora 0.00 din ziua ai ntrebi ce are,
el va cte secunde au trecut de cnd s-a
Colegii lui Gigel au nu e cazul se lase ca urmare au nevoie de un
program care de la un natural N (N::;2000000000) care
vrsta lui Gigel n secunde care va pe ecran ani, cte luni
cte zile are Gigel (orele minutele sunt considerate nesemnificative).
acest program pentru colegii lui Gigel!
Nu anii sunt cei divizibili cu 4, dar nedivizibili cu 100 sau divizibili cu 400.
De exemplu 1992 2000 au fost ani Dar anul 1900 nu a fost bisect. Anii au
366 de zile, spre deosebire de care au doar 365.
ne n ultima zi de (15 iunie 2002).
Exemplu:
N=6
126
9621
1212
3678
9231
9621
67
11. (Cifre. **) Se dau numere naturale a, b cu maxim 9 cifre.
a) se determine cifrele distincte, comune numerelor a b.
b) se cel mai mare format din toate cifrele lui a b.
10. cangurului **) A fost ca a fost un cangur care ca
Frumos din ptiveste, ntr-un an precum n zece. ntr-o zi a nceput
a nceput 7 metri. A doua zi a n plus de ziua de zece
ori mai mult. In a treia zi a n plus de prima zi, de zece ori mai mult
dect n ziua a doua. n a patra zi a n plus de prima zi, de zece ori mai mult dect
n ziua a treia. tot mai departe. un program care metri a
cangurul, n total, n 1l<12 zile.
I
al 2 5
bl 955222110
(Olimpiada de Gimnaziu, 2004, cls. V)
al 17
bl 4
el 2
dl 2
(Olimpiada de Gimnaziu, 2003, c!s. VI)
I 861 m
(Olimpiada de Gimnaziu, 2003, cls. V)
Exemplu:
a=2115
b=29025
Exemplu:
n=3
12. (Concurs **) La un concurs de elevi din mai multe din
diferite Pentru a se putea deosebi ntre ele lor, fiecare lucrare este
printr-un natural cu 3 cifre, zicem abc, unde a (cifra sutelor) este codul b
(cifra zecilor) este codul din a, iar c (cifra este codul unui elev din
b din a.
Exemplu: lucrarea cu codul 328 este lucrarea elevului cu codul 8 de la cu codul 2 din
cu codul 3. Se cunosc: un cod (al unui elev H, prietenul nostru),
n<20 de premiate codurile acestora. Codul de (cifra sutelor din fiecare cod)
este de la 1 la 5, inclusiv. Codurile din fiecare (cifra zecilor) este de la Ola 9,
inclusiv, iar codul elevilor (cifra este tot de la Ola 9 inclusiv.
9. (Gardul. **) Doi copii vopsesc un gard din n<100.001 scnduri pe care le vom
numerota de la I la n astfel: primul ia o cutie de vopsea cu care scndurile cu
p, 2p, 3p, etc. AI doilea la fel, ncepe de la al gardului,
dar ia o cutie de vopsea din q n q scnduri.
Astfel, cnd vor termina de vopsit, gardul va avea multe scnduri nevopsite, unele scnduri
vopsite n altele n albastru, iar altele n violet (cele care au fost vopsite cu
cu albastru).
Cunoscnd numerele Il, p q
a) cte scnduri nevopsite;
b) cte scnduri sunt vopsite n
c) cte scnduri sunt vopsite n albastru;
d) cte scnduri sunt vopsite n violet.
Exemplu:
n=25
p=4
q=6
68
14. (Excursie - **) Drumul de la la Soveja este marcat prin n+1 borne succesive,
borne numerotate de la Ola n. Borna O este la altitudinea O. Pe fiecare dintre
n borne sunt scrise cte doua numere naturale, primul reprezentnd altitudinea
locului al doilea reprezentnd de borna
Se cere se rezolve
a) H este premiant, sau nu.
b) de premii luate de elevii din lui H (inclusiv H, a fost
premiat).
c) de premii luate de elevii din lui H (inclusiv H, a fost
premiat).
al NU
bl 3
el 2
(Olimpiada de Gimnaziu, 2004, cls. V)
4
2
6
(Olimpiada de Gimnaziu, 2004, c1s. VI)
Exemplu:
ka=9
kb=10
13. - **) al regelui Arthur a primit vneze primele
ce se ntorc din calde. Regele fiind un tip cu idei fixe, i-a cerut
vneze albe cu albe, iar negre cu negre. vin n rnduri
(stoluri) din ce n ce mai mari: mai nti una, apoi trei, cinci, opt, treisprezece,
Se de dintr-un rnd este egal cu de de pe cele
rnduri anterioare. fiind creaturi ordonate n rnduri, n care nu vei
putea de culoare fiecare rnd ncepnd cu o
a nceput doboare o trebuie le doboare pe toate de pe
rndul acesteia, deoarece vor alerta celelalte ele nu se vor mai
ntoarce iar nostru va pierde slujba.
a primit ka albe kb (ka, kb < 2.000.000.001) negre,
trebuie cte rnduri de a dobort cte de fiecare tip i-au
el vrea slujba.
Se va pe ecran:
- de rnduri doborte
- de albe
- de negre
Exemplu:
H=234
n=6
123
232
125
222
421
235
23
dl=3
d2=19
d3=4
d4=lO
d5=17..
Se o este la altitudinea x, iar borna la altitudinea y (x <
y), atunci drumul ntre cele bome o este la o altitudine x, iar boma
este la altitudinea y (x> y), atunci drumul ntre cele bome o
este la altitudinea x, iar borna tot la altitudinea x, atunci drumul ntre cele
borne este tot timpul plat.
Se valoarea Il apoi Il perechi de numere naturale reprezentnd valorile nscrie pe
cele n bome. Deoarece turistul care de la spre Soveja, de cte ori
vi se cere lungimea celei mai lungi continue pe care acesta o
parcurge gfie. numai de urcare, se va valoarea O. Toate
numerele din sunt numere naturale nenule de cel mult cifre.
Exemplu:
n=5
hl=14
h2=14
h3=8
h4=lO
h5=5
(Olimpiada de Gimnaziu, 2001, cls. VI)
15. (Coordonate - **) Numerele naturale se ntr-un triunghi, ca n figura:
Al B1
.' \ /
A2 Il \ B2
\ / \ /
A3 /2\ /3\ B3
\ / \ / \ /
A4 /4\ /5\ /6\ B4
\ / \ / \ / \ /
/7\ /8\ /9\ /10\
Fiecare este n vrful unui romb este unic determinat de cele
diagonale (A B). Diagonalele sunt numerotate de sus n jos, n acest fel:
- 1 este pe diagonala Al diagonala Bl
- 2 este pe diagonala A2 diagonala Bl
- 3 este pe diagonala Al diagonala B2
I
A4 B2
Al B3
Fiind dat de la un ntreg pozitiv 11<32768, se scrie coordonatele celor
diagonale pe care se Il.
Exemplu:
n=12
n=6
(Concurs Sinaia, 1998, cls. VII)
16. (Becuri - ***) Pentru iluminatul public pe strada Info se un par de stlpi,
pe fiecare stlp fiind plasat un singur bec, de culoare sau Pentru a se putea
si ziua, cnd becurile sunt stinse, un bec este alb sau galben, elevii de la o au
scris pe fiecare stlp un de pe stlpii cu de ordine impar
de becuri albe ce sunt n partea a stlpului (exclusiv stlpul respectiv).
69
70
(Olimpiada de 2000, c1s. IX)
pe fiecare nivel k se sub fiecare i/j de pe nivelul de deasupra,
iI(i+j) n stnga, iar (i+j)/j n dreapta.
alb
alb
galben
alb
galben
alb
Becul 1:
Becul 2:
Becul 3:
Becul 4:
Becul 5:
Becul 6:
2/1
2/1
2/3 3/1
1/1

(Olimpiada de 2001, cls. IX)
1/2
Dndu-se o oarecare prin numitorul
nivelului pe care se sau o (avnd valoare) cu aceasta.
Se citesc numere naturale nenule N,M ::; 2000000000, separate printr-un
reprezentnd numitorul unei se va natural nenul,
reprezentnd nivelului care corespunde
Exemplu:
N=13 M=8
N=12 M=8
nivelul 1: 1/1
nivelul 2: 1/2
nivelul 3: 1/3 3/2
nivelul 1:
nivelul 2:
18. (Tablou *****) un tablou bidimensional cu
N linii N coloane (N<lOl);
elementele sale sunt numere naturale nenule;
suma elementelor este cu natural nenul S (S<2
31
) ;
pe nici o linie pe nici o nu elemente identice;
dintre cel mai mare cel mai mic element ale tabloului este
17. - ****) O proprietate a ireductibile este orice se
poate reguli:
pe primul nivel se 1/1;
pe al doilea nivel, n stnga 1/1 de pe primul nivel, 1/2 iar n
dreapta ei 2/1;
de pe stlpii cu de ordine par de becuri galbene ce sunt
n partea a stlpului (exclusiv stlpul respectiv). Un elev mai zburdalnic a modificat
numerele de pe stlpi, astfel nct scris sub fiecare bec galben este eronat, iar
scris sub fiecare bec alb este corect. Elevii care au spus n
aceste ei pot determine cu exactitate culoarea bec. un program
care sa de stlpi N<lOOl precum numerele scrise pe cei N stlpi care
pe ecran culoarea celor N becuri.
Exemplu:
N=6
O
O
1
1
4.
2
1
4 6 7
745
5 7 6
(Olimpiada de 2001, cls. IX)
doze:2
ciuperci fermecate ramase:1
ciuperci care nu sunt fermecate:1
7
11
19
83
(Concurs "Grigore Moisil", Lugoj 2000, cls. VII-VIII)
I
k=7
k=10
Se citesc numere naturale nenule, separate printr-un reprezentnd de
linii de coloane ale tabloului, respectiv valoarea sumei tuturor elementelor din tablou si
se va afisa pe N linii elementele tabloului, cte o linie din tablou; elementele se vor separa
prin cte un problema nu are se va scrie cifra O. problema are
mai multe se va scrie una
Exemplu:
N=3 S=51
19. - **) Un vrea prepare o licoare Pentru o doza de
licoare el are nevoie de M ciuperci fermecate. O este
bulinelor de pe ei este prim.
Ucenicul a cules N ciuperci dintre care unele sunt fermecate, altele nu.
vrea afle cte doze de licoare poate prepara din ciupercile culese, cte ciuperci
fermecate i cte ciuperci nu sunt bune de nimic. un program care
ajute! Fiecare are cel buline.
Exemplu:
M=3 N=8
2
11
5
15
7
3
13
23
(Concurs "Grigore Moisil", Lugoj 2002, cls. V-VI)
20. (Cte sunt - *****) Fie A={l, 2, ... , /I}. un program care
de la natural /1<10.000 care pe ecran cte numere
distincte de forma p/q cu p q din A
Exemplu: .
N=3
N=4
N=5
N=ll
21. (Factorial - *) Fie N un natural (I.000:S:N:S:2.000.000.000) despre care se
factorialul unui k (N= 1*2*3* ... *k). un program care pe
N determine k.
Exemplu:
N=5040
N=3628800
71
72
1
1 2 15
40 41
I 257
26. (Seiful - *****) Se o comisie din n<500 persoane (numerotate de la
l la Il) care trebuie ntr-un seif subiectele de la examenul de admitere. se
determine minim de lmin necesar nchiderii seifului astfel nct existe o
a cheilor lor care
oricare persoane de chei
fiecare chei de la diferite
toate seifului se vor putea deschide numai n grup format din
cel n-I persoane
25. (Numere -***) un program care descompune natural n<51 n de
numere naturale n=Il}+1l2+'" +nk, astfel nct produsul lor p =Il} *112*'" *nk fie maxim.
Exemplu:
n=6 9
n=7 12
n=8 18
Pentru un pot exista mai multe chei care Nici o cheie nu poate deschide
diferite. sunt numerotate de la l la lmin.
se determine minim de total de chei distribuite o repartizare a
cheilor care problemei.
Exemplu:
n=3 lmin=3 chei=6
lacat 1: 3 2
lacat 2: 1 2
lacat 3: 3 1
(Barajul lotului de pentru 101 ,1998)
Exemplu:
R=4
23. (Pitagora - ****) Se a un natural nenul (a<30000). se
toate perechile de numere naturale b c (a<b<c) care cu a triplete de
numere pitagorice.
Exemplu:
a=9
24. (Sfera - **) Cte puncte cu coordonate ntregi sunt ntr-o sfera de R cu
centrul n originea sistemului de coordonate? Se ca R este un natural mai
mic sau egal cu 30. d dintre un punct cu coordonatele (x, y, z) originea
sistemului de coordonate se formula:
d +i +Z2
22. (Suma minima - *) Se de la un natural Il se
n bazele de de la 2 la 10. se determine bazele n care suma cifrelor
Il este
Exemplu:
n=13 I 2 3 6
27. (Tort - ****) De ziua ei, Ionela a un tort n Dorind
cu prietenii ei, Ionela A dintr-un oarecare B din alt
al tortului (un un vrf al triunghiului multe astfel de ea
este oare cte felii de tort n triunghiul a Prin felie
un triunghi cu pe laturi si vrfuri n O felie poate
alte n interior.
pe Ionela numere feliile de tort n Se A, B sunt
numere naturale mai mici ca 30.000.
Exemplu:
A=l B=2 15
A=l B=O 3
(http://infoarena.devnet.ro)
28. (Tabela - ***) Macarie, pasionat de numere, mai ales de matrici ncepe intr-o zi
umple o foaie de (cu cu numere astfel: n cel mai de
sus stnga (1,1) pune 0, apoi scrie de la stnga la dreapta de sus n jos cel mai mic
care nu apare pe linia coloana Dndu-se linia L coloana C (numere naturale
sub 2 miliardejunei din de la acea
012345 .
103254 .
230167 .
321076 .
Exemplu:
L=2 C=3
L=4 C=5

(http://infoarena.devnet.ro)
29. (Factorial - *****) un ntreg P (0<P<108). Problema cere celui
mai mic natural strict pozitiv N pentru care produsul 1*2*3* ... *N are exact P cifre
de la
Exemplu:
P=2 10
P=10 45
(http://infoarena.devnet.ro)
30. (Rnd - ******) Se infinit de numere: 3, 4, 5, 6, 7 8 ...
La fiecare mutare alegi primul din fie acela x, l pe a x-a
3,4,5,6,7,8 -74,5,3,6,7, 8 -75,3,6,4,7,8 ... -7
3,6,4,7,5,8, -7 6,4,3, 7, 5,8 etc.
se determine pentru un natural n dat, care este cea mai mutare la care acesta
apare pe prima Rezultatul va fi mai mic ca 2 miliarde.
Exemplu:
n=3 1
n=4 2
n=5 3
n=6 5
73
Care din referiri ale elementelor celor doi vectori sunt incorecte?
Care din referiri ale elementelor celor doi vectori sunt incorecte?
d) x[300-y[0]]
d) 1 2 3 4 5
d) b[i]
d) 1 2 3 4
e) x[ '1']
c ) O 1 2 3 4
for (i=0;i<5;i++) v[i]=2*i;
e) b[ '1']
c ) O 1 2 3 4
for (i=O; i<5; i++) a[i]=i;
a) int a[100];
b) char a[l .. 100];
e) float a[1.10 .. 10.00];
d) char a [100];
74
b) y( (x[l]))
b) O 2 4 6 8
b) al-il
b) O O O O O
a) x[y[l]]
for i:=l to 5 do v[i] :=2*(i-1);
a) 2 4 6 8 10
S. Se
a) a[i*2]
3. Se
Tipuri de Date Structurate
4. Fie var v. array[O..4}of integer; (varianta Pascal), respectiv int v[4},o (varianta
C/C++). valoarea elementelor tabloului
2.1.1 Testecu alegere
var x:array[O .. 300] of ehar; I char x[301];
y:array[O.. 300] of byte; i:byte; unsigned char y[301] ,i;
var a:array[O .. 600] of real; I float a[600];
b:array[l .. 300] of ehar; i:byte; char b[300]; unsigned char i;
for i:=l to 5 do ali] :=i-1;
a) 1 1 1 1 1
2. Se var a .' array[1..5}of byte; (varianta Pascal),
respectiv unsigned char a[4} (varianta C/C++). valoarea elementelor tabloului

a) a:array[l .. 100]of integer;
b) a:array 1 .. 100 of byte;
e) a:array[1.00 .. 10.00]of real;
d) a:array[l .. 100] of ehar;
1. care din sunt corecte:
Tabloul unidimensional
6. Ce valori vor fi n urma program?
var
a:array[l .. 5] of integer;
i:integer;
begin
for i:=l to 5 do ali] :=i*10;
for i:=2 to 5 do
ali] :=a[i]-a[i-1];
for i:=l to 5 do write(a[i],' ')
end.
a)10 20 30 40 40 b)O 10 20 30 40
#inelude <iostream.h>
int a[5],i;
void main() {
for (i=0;i<5;i++) a[i]=(i+1)*10;
for (i=1;i<5;i++) a[i]-=a[i-1];
for (i=0;i<5;i++)
eouta [i] ' ';
e)10 10 10 10 10 d)10 10 20 20 30
7. Ce valori vor fi n urma program?
var a:array[l .. 6] of integer;
i:integer;
beg-in
for i:=l to 6 do ali] :=0;
for i:=l to 3 do a[2*i] :=i;
for i:=l to 6 do write(a[i], , ')
end.
#inelude <iostream.h>
int a[6],i;
void main(){
for (i=0;i<6;i++) a[i]=O;
for (i=0;i<3;i++) a[2*i+1]=i+1;
for (i=0;i<6;i++)
eouta[i]' ';
a) O 1 O 2 O 3 b) 1 O 2 O 3 O e) O 2 O 4 O 6 d) 1 2 3 4 5 6
8. Ce valori vor fi n urma program?
var a:array[l .. 5] of integer;
i:integer;
beg-in
for i:=l to 5 do ali] :=i-1;
write(a[2] , , ');
write(a[a[2]],' ');
write(a[a[a[3]]],' ');
end.
#inelude <iostream.h>
int a [6] ,i;
void main() {
for (i=1;i<=5;i++) a[i]=i-1;
eouta[2]' ';
eouta[a[2]]' ';
eouta[a[a[3]]]' ';
}
a) 1 O 1 b) 1 1 1 c ) 1 2 O d) 1 O O
9. Ce valori vor fi n urma program?
var a,b:array[l .. 5] of integer;
i:integer;
beg-in
for i:=l to 5 do
if i mod 2<>0 then ali] :=1
else ali] :=i+1;
for i:=l to 5 do b[i] :=a[i]*2;
for i:=l to 5 do write(b[i] , , ')
end.
#inelude <iostream.h>
int a [ 5] , b [ 5] , i ;
void main(){
for (i=0;i<5;i++)
if (i%2==0) a[i]=l;
else a[i]=i+2;
for (i=0;i<5;i++) b[i]=a[i]*2;
for (i=0;i<5;i++)
eoutb[i]' ';}
a) 1 6 1 10 1 b) 2 6 2 10 2 e) 2 2 6 2 2
75
d) 2 4 6 8 10
13. Considernd echivalente:
10. Care dintre de n mod corect elementul
maxim din vectorul a: l ..5] of integer (varianta Pascal), respectiv int a[4]; (varianta
C/C++).?
11. Care dintre deplasarea cu o spre dreapta a
tuturor elementelor tabloului a ncepnd cu cel situat pe p. Valoarea variabilei
ntregi 11 indicele ultimului element din vectorul a.
a) for(i=O;i<n;i++}
if(i%2!=0} s=s+a[i];
b} for(i=l;i<=n/2;i++)
s=s+a[i*2-1];
e) for(i=n-l;i>l;i--)
if (i%2!=O) s=s+a[i-I];
d} for(i=2;i<=(n+I}/2;i++}
s=s+a[i*2-3];
a)max=a [O] ;
for (i=l;i<5;i++)
if (a[i]>max) max=a[i];
b)max=O;
for (i=0;i<5;i++)
if (a[i]>max) max=a[i];
e}max=a[n-I] ;
for (i=n-l;i>=O;i--)
if (a[i]>max) max=a[i];
d)max=30000;
for (i=4;i>=0;i--)
if (a[i]>max) max=a[i];
76
a} for i:=1 to n do
if odd(i} then s:=s+a[i];
b} for i:=1 to n div 2 do
s:=s+ a[i*2-1];
e} for i:=n to downto 2 do
if odd(i} then s:=s+a[i-1];
d} for i:=2 to (n+l}div 2 do
s:=s+a[i*2-3];
a} for i:=p+1 to n do a) for(i=p+l;i<=n;i++}
a li] : =a [i-I] ;
a [ i] =a [ i -1] ;
b} for i:=p to n-I do b} for(i=p; i<n; i++}
a [i] : =a [ i +I] ;
a [ i] =a [ i +I] ;
e} for i:=n to downto p+1 do e) for(i=n;i>p;i--)
a[i-I] :=a[i];
a [i-I] =a li] ;
d} for i:=n downto p do d} for(i=n;i>=p;i--}
a[i+l] :=a[i];
a[i+I]=a[i] ;
a) for i:=p to n do a} for(i=p;i<=n;i++}
a [ i +I] : =a [i] ;
a [i+l] =a li] ;
b) for i:=p+1 to n+1 do b} for(i=p+l;i<=n+l;i++)
ali] :=a[i-I];
a[i]=a[i-I] ;
e} for i:=n+1 to downto p do e} for(i=n+l;i>=p;i--}
ali] :=a[i-I];
a[i]=a[i-I] ;
d) for i:=n downto p do d} for(i=n;i>=p;i--}
a[i+l] :=a[i];
a[i+I]=a[i] ;
12. Care dintre deplasarea cu o spre stnga a
tuturor elementelor tabloului a ncepnd cu cel situat pe p+l, n vederea
elementului de pe p? Valoarea variabilei ntregi 11 indicele ultimului
element din a.
a} max: =a [ I] ;
for i:=2 to 5 do
if a[i]>max then max:=a[i];
b} max: =0;
for i:=1 to 5 do
if a[i]>max then max:=a[i];
c ) max: =a [n] ;
for i:=n downto I do
if a[i]>max then max:=a[i];
d} max:=30000;
for i:=5 downto I do
if a[i]>max then max:=a[i];
77
15. Fie a un vector cu n=9 componente ntregi. Ce va pentru a=(14, 3, 7, O, -4, 3, 10,
15, 7) )?
d} 50
d) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce se va pentru n=5 tabloul
a=(22,4, 10,5, 16)?
b) un exemplu de set de date de
intrare pentru care nu se va efectua nici o
2.1.2 Teste cu itemi semiobiectivi
b) un exemplu de set de date de
intrare pentru care nu se va efectua nici o
interschimbare.
c) exemplu de set de date de intrare
cu valori neordonate, pentru care se va
un de valori ordonate
a) Ce se va pentru n=6 tabloul
a=(2, O, 1,4,6, 3)?
a} int a [20] ;
b) int a[ ] ;
e} unsigned int *a;
d} unsigned int a [20] ;
e} short int a [20] ;
e} 21
s=O;
for(i=O;i<n;i++}
if (i%2==0) s+=a[i];
eouts;
b} 34
n do
then s: =s+a[i];
\
intreg i, ni a[lOO];
citeste n;
rpentru n executa
t. citeste a [il ;
intreg i,n,a[lOO];
citeste n;
rpentru n executa
t. citeste a [ i] ;
[
e n t ru n-1 executa
raaca a[i]>a[i+1] atunci
l.. ali] .... a[i+1]; .
C
en t ru n executa
scrie a[i];
stop.
2. Se program pseudocod:
a} O
s:=O;
for i:=l to
if odd(i)
writeln(s};
1. Se program pseudocod:
a} type
as=array[1 .. 20] of integer;
var a: as;
b} var
a=array[l .. 20] of integer;
c ) var
a:array[1 .. 20]of -33760 ... 33767;
d ) var
a:array[1 .. 20] of byte;
e} var
a:array[/a
/
.. 't'] of integer;
14. Care dintre de mai jos declararea a unei variabile de tip
tablou unidimensional cu 20 elemente ntregi cu semn:
3. Se program pseudocod:
c) exemplu de set de date de intrare
pentru care nu se va nici o valoare.
a) Ce se va pentru x=20341?
b) un exemplu de set de date de
intrare pentru care se va
tablou cu ce] citit.
d) programul n limbajul de
programare studiat Pascal/C/C++.
b) un exemplu de set de date de
d) programul n limbajul de
programare studiat Pascal/C/C++.
d) programul n limbajul de
programare studiat Pascal/C/C++.
c) algoritmul folosind structura
posterior, n locul
structurii cat_timp.
b) un exemplu de de intrare
pentru care se va un de cifre
identic cu cel citit.
c) daca_atunci
folosind o
astfel de
echivalente cu cea

modificare a valorilor tabloului.
a) Ce se va pentru n=6 tabloul
a=(3,-1,-4,2,4,5)?
a) Ce se va pentru 1l=8 tabloul
a=(2, 2,3,4, 1,2,2, 2)?
78
[
e n t ru n-1 executa
raaca ali] div 10=0 atunci
l. ali] a[i-1] + a[i+1];
C
e n t ru n executa
scrie ali];
stop.
intreg i, n, j, k, a[lOO];
citeste n;
rpentru i 1, n executa
L. citeste a[i];
i 1; j n;
[
a t .
executa
i i + 1; j j - 1;
C
e n t ru k i, j executa
scrie a[k];
stop.
intreg i, n, nr, a[lOO];
citeste n; nr O;
rpentru n executa
L. citeste a[i];
intreg i, n, x, a[lOO];
citeste X;
n O;
[
a t timp X O executa
n n + 1;
a[n] x mod 10;
x x div 10;
C
e nt ru i 1, n executa
scrie ali];
stop.
4. Se program pseudocod:
5. Se program pseudocod:
6. Se program pseudocod:
a) Ce valori vor fi pentru n=5
vectorul a=(2,5,3,6,1)? Dar pentru n=5
vectorul a=(2,5,3, 1,-1)?
c) un de a
rezolvare este algoritmul prezentat.
intrare pentru care variabila nr va primi
valoarea 11-1.
c) exemplu de set de date de intrare
pentru care se va mesajul' DA'.
d) Pentru n>1, un set de valori
pentru elementele vectorului a, astfel
nct n final algorimul o
valoare?
d) programul n limbajul de
programare studiat Pascal/C/C++.
b) un exemplu pentru datele de
intrare astfel nct se valorile
din vector nemodificate.
+ li
n executa
- 2i
at timp i < n executa
a a[i]=a[i-1]+a[i+1] atunci
rpentru j - i, n executa
t.. a[j] - a[j+1];
altfel i _ i
III
rpentru i - 1,
l.. scrie a [ i] i
[
e nt ru i-1, n-1 executa
a[i]*a[i+1] < O atunci
l. nr - nr + 1;
C
a c a nr O atunci scrie 'DA'
altfel scrie 'NU'
stop.
intreg a[100], i, n, ji
citeste n;
i - 1, n executa
t.. citeste ali] i
e) programul n limbajul de
programare studiat Pascal/C/C++.
7. Se program pseudocod:
intreg nr[10],c,max,i.ln,j,xi
citeste ni max O;
rpentru i-O, 9 executa
l.. nr[i] - Oi
r
p e n t ru i - 1, n executa
citeste ji
at timp j O executa
x - j mod 10i
nr[x] _ nr[x]+l;
max< nr[x] atunci
l.max - nr[x]i C - Xi
j _ j div 10i
a) Ce valori vor fi pentru n=5
valorile 22,235,233,6,221?
b) un exemplu pentru datele de
intrare (nu toate nule), astfel nct se
valoarea O
c) un de a
rezolvare este algoritmul prezentat.
d) algoritmul folosind structura
posterior n locul structurii
cattimp,
e) programul n limbajul de
programare studiat Pascal/C/C++.
79
80
9. Se program pseudocod:
8. Se program pseudocod:
a) Ce valori vor fi pentru n=7,
x=5 valorile 3, 5, 6, 7, 8, 9, 23? Dar
pentru n=7, x=15 valorile 3,5,6,7,8,
9,23?
b) Ce valorii variabilei
m? Dar variabilei p?
c) un de a
rezolvare este algoritmul prezentat.
d)Cte de comparare se
maxim n cazul unui vector
de cu 1024 de valori ordonate
e) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce valori vor fi pentru n=7
valorile 2, 2, 34,5,6, 78, 8 ?
b) un exemplu pentru datele de
intrare (nu toate nule), astfel nct nu
se nici un caracter "".
c) un de a
rezolvare este algoritmul prezentat.
d) Care este maxim de caractere
'*' care pot fi pentru un tablou
cu Il elemente?
e) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce valori vor fi pentru n=7
valorile 3, 5, 6, 4, 8, 9, 2? Dar pentru
n=7 valorile 3,5,6, 7, 8, 9, 23?
b) exemplu de valori pentru care se
va de valori 8 5 3 12.
c) Ce valorii variabilei
nr?
d) Considernd o valoare oarecare
pentrun, cum trebuie fie
valorilor introduse pentru ca la final
se tot cele n valori?
e) programul n limbajul de
programare studiat Pascal/C/C++.
i 1; j n;
cat timp(i*j)and(p=O)executa
m (i+j) div 2;
[
a c a a[m]: x atunci p m
altfel scrie ali];
r:aca a[m]>x atunci
L:ltfel i m + 1;
intreg a[100], max, i, n;
citeste n; max 1;
rpentru i 1, n executa
La citeste a [ i] ;
scrie a[l];
pentru i 2, n executa
[
a c a a[i]< a[i-1] atunci
max max + 1;
scrie '*', a [i] ;
altfel scrie ali];
intreg A[100], max,i,n;
citeste n; p O;
rpentru i 1, n executa
La citeste a [il ;
1
5
6
7
8
9
10
11
12
13
14 scrie max;
15
16 scrie p;
1 intreg a[100], max,i,n;
2 citeste n, a[l]; nr 1;
3 pentru i 2, n executa
4 citeste x; k 1;
5 cat timp(x<=a[k])and(k<=nr)
6 executa k k + 1;
7
8 caca k=nr + 1 atunci
9 nr nr + 1 ;
10
11 a[k] ..... x;
12
13 centru i ..... 1, nr executa
14 scrie a[i];
15
10. Se program pseudocod:
81
Algoritmul de se pe n-I succesivi de tipul:
Considernd vectorul are n elemente atunci sortarea n-l astfel de
#include <iostream.h>
int a[lOO] ,i,n,p,j,aux;
void main() {
cinn;
for (i=O;i<n;i++) cina[i];
for (i=0;i+1<n;i++) {
p=i;
for (j=i+l;j<n;j++)
if (a[p]>a[j]) p=j;
aux=a[i]; a[i]=a[p];
a[p]=aux;
}
for (i=O;i<n;i++)
couta [i]' ';
\1'
var
a:array[l .. 100] of integer;
i,n,p,j,aux:integer;
begin
readln(n) ;
for i:=l to n do read(a[i]);
for i:=l to n-1 do begin
p:=i;
for j:=i+l to n do
if a[p]>a[j] then p:=j;
aux:=a[i];
ali] :=a[p];
alpI :=aux;
end;
for i:=l to n do write(a[i], ' ')
end.
2. Fie un tablou unidimensional care n valori ntregi. un program care
elementele vectorului folosind "algoritmul de sortare cu bule" -
(Bubble Sort).
2.1.3 Probleme rezolvate
Solutie: n cadrul acestui algoritm, elementele vectorului sunt n liste:
Cel mai mic element este "ridicat" din lista mutat n cea
mutare, "peretele" care desparte cele liste cu o n
acest fel cu un element lista cu un element cea
La fiecare pas de acest tip se s-a ncheiat un pas complet al
De cte ori se deplasare, spunem s-a ncheiat un pas complet al
avem n elemente n vector, vor exista n-l astfel de
identificarea celui mai mic element al listei neordonate
interschimbarea minimului cu primul element al listei neordonate.
selectie (identificare a elementului minim) interschimbare, "peretele"
se va deplasa cu un element nainte. n felul acesta se cu 1 de
elemente al listei ordonate se cu 1 de elemente al listei neordonate.
Solutie: n cazul prin elementele vectorului sunt divizate n "liste",
una iar ele sunt de un "perete"
imaginar.
1. Fie un tablou unidimensional care n valori ntregi. un program care
elementele vectorului folosind "algoritmul de
82
4. Fie un tablou unidimensional care n valori ntregi distincte. un program
care elementele vectorului folosind "algoritmul de
#include <iostream.h>
int a[lOO],i,n,j,aux;
void main{) {
cinn;
for (i=O;i<n;i++) cina[i];
for (i=O;i<n;i++)
for (j=n-I;j>i;j--)
ii ( a [ j ] <a [ j -1]) {
a[j]=a[j-1];
a[j-1]=aux;
}
for (i=O;i<n;i++)
couta[i]' ';
#include <iostream.h>
int a[lOO),i,n,j,aux,ok;
void main() {
cinn;
for (i=O;i<n;i++) cina[i];
for (i=l;i<n;i++) {
aux=a[i); j=i-l; ok=O;
while (j>=O && !ok)
ii (aux<a[j)) {
a [ j +1] =a [j l : j - - ;
}
al se ok=l;
a[j+I)=aux;
}
for (i=O;i<n;i++)
couta[i]' ';
var a:array[l .. 100]of integer;
i,n,j,aux:integer;
bag-in
readln (n) ;
for i:=l to n do read(a[i])
for i:=l to n do
for j:=n downto i+I do
if a[j]<a[j-I] than bagin
aux:=a[j] ;a[j] :=a[j-I];
a[j-I] :=aux
end;
for i:=l to n do write(a[i], , ')
and.
var a:array[l .. 100]of integer;
i,n,j,aux:integer; ok:boolean;
bag-in
readln{n) ;
for i:=l to n do read(a[i])
for i:=2 to n do bagin
aux:=a[i]; j:=i-I;
ok:=false;
while (j>=l)and(not ok) do
if aux<a[j] then begin
a[j+l] :=a[j]; j :=j-I
end
alse ok;=true;
a[j+l) :=aux
and;
for i:=l to n do write(a[i) , , ')
end.
Solutie: Algoritmul de sortare prin pe idee de a divide vectorul
n liste: La fiecare pas, primul element al listei nesortate este
transferat n cea exact pe prin care se ordinea a
elementelor. se va efectua prin deplasarea cu o spre dreapta a
tuturor elementelor mai mari dect el.
3. Fie un tablou unidimensional care n valori ntregi. un program care
elementele vectorului folosind "algoritmul de - (Insertion
Sort).
Solutie: vectorul A. Algoritmul de sortare prin n
pentru fiecare element a[i], a de elemente din vector mai mici ca el. Numerele
sunt memorate ntr-un alt vector B. Elementele vectorului A vor fi salvate n
vectorul auxiliar C. La finalul algoritmului se vor rescrie n ordine elementele
vectorului A pe baza valorilor memorate n B C.
1 var
2 a,b,e:array[l .. 100]of integer;
3 i,n,j,aux:integer; ok:boolean;
4 bagin
5 readln (n ) ;
6 for i:=l to n do read(a[i]);
7 for i:=l to n do begin
8 b[i] :=0; eri] :=a[i]; end;
9 for i:=2 to n do
10 for j:=l to i-1 do
11 if e[j]<e[i] then ine(b[i])
12 elsa ine(b[j]);
13 for i:=l to n do
14 fl[l+b[i]]: e[i];
15 for i:=l to n do write(a[i], I ')
16 and.
17
#inelude <iostream.h>
int a[100] ,b[100] ,e[100];
int i,n,j,aux,ok;
void main() {
einn;
for (i=O;i<n;i++) eina[i];
for (i=O;i<n;i++) {
b[i]=O; e[i]=a[i];
}
for (i=l;i<n;i++)
for (j=O;j<i;j++)
if (e[j]<e[i]) b[i]++;
else b[j]++;
for (i=O;i<n;i++)
a[b[i]]=e[i];
for (i=O;i<n;i++)
eouta [i] I ';
5. Fie N un natural de cel mult 9 cifre. se genereze toate numerele care se pot
scrie ca produs de numere prime mai mici ca N.
Solutie: Pentru optimizarea algoritmului de generare a numerelor prime vom proceda
astfel: variabila p va parcurge toate numerele impare mai mici ca n. Pentru a verifica
p este un prim se va testa unul din numerele prime mai mici ca el un
divizor al lui. Vectorul prim va toate numerele prime mai mici dect N. Valorile care
se vor n final se vor ca produse a elemente ale vectorului prim.
1 var prim:array[1 .. 100]of
2 integer;
3 m,i,p,n,j:integer;
4 begin
5 readln (n ) ;
6 prim[l]:= 2; m:= 1; p:= 3;
7 while p<=n do begin
8 i: =1;
9 while i<=m do
10 if p mod prim[i]=O then i:=n
11 alse ine(i);
12 if i<>n then bagin
13 ine(m); prim[m]:=p;
14 end,
15 p: =p + 2
16 and;
17 for i:=l to m do
18 for j:=i to m do
19 writeln(prim[i]*prim[j])
20 and.
#inelude <iostream.h>
int prim[100],m,n,i,p,j;
void main() {
einn;
prim[0]=2;m=1;p=3;
whd Le (p<=n) {
i=O;
while (i<m)
if (p%prim[i]==O)
i=ni
alse
i++;
if (i!=n) prim[m++]=p;
p+=2;
}
for (i=O;i<m;i++)
for (j=i;j<m;j++)
eoutprim[i]*prim[j]endl;
6. Se Il intervale nchise [a,b]. se determine reuniunea acestora.
Solutie: Vom fiecare stng al intervalelor n vectorul A iar cel drept n vectorul
B. Primul pas al algoritmului va ordona intervalele n de stng al acestora.
Pentru determinarea reuniunii, este o parcurgere a acestora, la
fiecare moment stng drept al intervalului curent al reuniunii, actualiznd la
nevoie valorile acestora.
83
84
8. Fie o ce 11 elemente (11 <25). se toate acestei

#include <iostream.h>
int a[lOO],b[lOO] ,i,n,j,x,y;
void main() {
cinn;
for (i=O;i<n;i++)
cina[i]b[i];
for (i=O;i+l<n;i++)
for (j=i+l;j<n;j++)
if (a [ i ] >a [j ]) {
x=a[i] i a[i]=a[j]; a[j]=x;
x=b[i]; b[i]=b[j]; b[j]=x;
}
x=a [ O]; y=b [ O] ;
for (i=l;i<n;i++)
if (a[i]>y) {
coutx' 'yendl;
x=a[i]; y=b[i];
}
else if (b[i]>y) y=b[i];
coutx' 'yendl;}
}
for(i=O;i<p;i++) a[n+i]=a[i];
for(i=pii<n+p;i++)
a [ i -p] =a [ i] ;
for (i=O;i<n;i++) couta[i];
}
#include <iostream.h>
char a[lOO],min;
int i,j,n,p;
void main() {
cinn;
cina[O];
p=O; min=a[O];
for (i=l;i<n;i++)
cina[i] ;
if (a li] <min) {
min=a[i]; p=i;
var a,b:array[l .. lOO]of integer;
i,n,j,x,y:integer;
bagin
readln(n) i
for i:=l ta n do read(a[i],b[i]);
for i:=l ta n-l do
for j:=i+l ta n do
if a[i]>a[j] than begin
x:=a[i] ;a[i] :=a[j] ;a[j] :=x;
x:=b[i] ibri] :=b[j] ;b[j] :=x;
end;
x:=a[l];y:=b[l];
for i:=2 ta n do
if a[i]>y then bagin
writeln(x,' ',y);
x:=a[i] ;y:=b[i]; and
elsa
if b[i]>y than y:=b[i];
writeln(x, , ',y)
end.
var a:array[l .. 100]of char;
i,j,n,p:integer;min:char;
bagin
readln(n) ;readln(a[l]);
p:=l; min:=a[l];
for i:=2 ta n do begin
readln(a[i]);
if a[i]<min than begin
min:=a[i] ;p:=i;
end;
end;
for i:=l ta p-l do a[n+i] :=a[i];
for i:=p ta n+p-l do
a[i-p+l] :=a[i];
for i:=l ta n do write(a[i])
end.
7. Se un tablou unidimensional ce 11 caractere distincte. se
permutarea a lui, care ncepe cu cel mai mic caracter n sens lexicografic.
Exemplu: Pentru 11=5 tabloul ('m','i','o','a','r') se va Ca','r', 'm','i','o').
Solutie: cu ajutorul vectorului A=(a[1],a[2], ...a[n]).
cu B o a A. Vectorului caracteristic al cuprinde 11
elemente avnd valori din {O, 1}.
Solutie: Se va determina elementului minim n vector, care toate elementele
din lui se vor copia la final, ncepnd cu 11+1. elementelor din
minimului se va face prin spre stnga ale celorlalte prezente n vector.
{
C[ i ] = 1 daca a[i] E A
c[i] = O daca a[i] (l A
cu ajutorul vectorului (3,1,4,5,2,8).
{2,4,1} poate fi cu ajutorul vectorului caracteristic (0,1,1,0,1,0).
este prin simularea n baza 2 dintre 1 ale
cifre sunt elementele vectorului caracteristic. Reamintim 1+1

1+0=1
2
1) Se ncepe cu vectorul caraceristic al vide.
2) Pornind de la elementul c[n], atta timp ct se ntlnesc elemente egale cu ele se
n zero (1+1=10
2
) , Primul element egal cu se n 1.
3) Se elementele reprezentate de vectorul caracteristic
care se revine la pasul 2.
Algoritmul se cnd a fost generat vectorul caracteristic cu toate elementele egale
cu 1.
var e,a:array[l .. 100] of byte;
n,i:integer; ok:boolean;
begin "
read(n) ;
for i:=1 to n do read(a[i]);
fil1ehar(e,n, O);
ok:=true;
while ok do begin
i:=n;
while (e[i]=l)and(i>O) do
begin
e li] : =0;
i:=i-l;
end;
if i=O then ok:=false
else begin
eli] :=1;
writeln;
for i:=1 to n do
if e[i]=l then write(a[i], ' ')
end;
end;
end.
#inelude <iostream.h>
unsigned char a[lOO],e[lOO];
int n,i,ok;
void main() {
einn;
for (i=O;i<n;i++) eina[i];
for (i=O;i<n;i++) e[i]=O;
ok=l;
while (ok) {
i=n-l;
while (e[i]==l && i>=O) {
e[i]=O;
i--i
}
if (i==-l) ok=O;
else {
e[i]=1;
eoutendl;
for (i=O;i<n;i++)
if (e[i]) eouta[i]' ';
}}}
9. Se un vector cu n elemente ntregi. se elimine ct mai elemente de la
vectorului astfel nct cel valori la "capete" fie consecutive.
Exemplu: Pentru n=9 vectorul (8,2,4,5,2,5,3,4,6) se va :(2,4,5,2,5,3) deoarece s-a
eliminat primul element ultimele Valorile la capete sunt consecutive.
Solutie:Algoritmul pentru fiecare element din vector elementului
"pereche", a elementului cel mai apropiat de ultimul element, cu proprietatea ca
valoarea a lor este cu 1.
85
Solutie: Suma unei perechi se prin nsumarea tuturor elementelor vectorilor A B
acestei valori la n. O pereche va fi din elementul ari] S- a[i](care se
ca element n vectorul B, conform
}
s/=n;
coutsendl;
for (i=O;i<n;i++)
couta[i]' '
s-a[i]endl;
#include <iostream.h>
int j,i,n,a[100J,b[100J,s=0;
void main() {
cinn;
for (i=O;i<n;i++) {
cina[i]; s+=a[i];
}
for (i=O;i<nii++) {
cinb[i]; s+=b[i];
#include <iostream.h>
#include <math.h>
unsigned char a[100];
int min,n,i,j,p1,p2,x;
void main() {
cinn;
p1=0; p2=-1;
for (i=O;i<n;i++) cina[i];
for (i=O;i<n;i++) {
for (j=n-1;j>=i;j--)
if (abs(a[i]-a[j]}==1)
x=j; break;
}
if (n-x<min)
{ min=n-x; pl=i; p2=x;
}
for (i=pl;i<=p2;i++)
couta [i]' ';
86
end.
var j,i,n,s:integer;
a,b:array[l .. 100]of integer;
begin
. s:=O; readln(n};
for i:=l to n do begin
readln(a[i]) ;
s:=s+a[i] ;
endi
for i:=l to n do begin
readln(b[i]); s:=s+b[i];
end;
s:=s div n; writeln(s) ;
for i:=l to n do
writeln(a[i],' ',s-a[i]} ;
end.
var a:array[1 .. 100]af byte;
min,n,i,j,p1,p2,x:integer;
begin
read(n); min:=n; p1:=1; p2:=0;
for i:=1 ta n do read(a[i]};
for i:=1 to n do begin
for j:=n downto i do
if abs(a[i]-a[j])=1 then
beg-in
x:=j; break;
end;
if n-x<min then begin
min:=n-x; p1:=i; p2:=x;
end;
end;
for i:=p1 to p2 do
write(a[iJ,' ')
16
10. Se doi vectori A B cu n elemente valori naturale. Se toate elementele
lor se pot grupa n n perechi de forma (a[i],bU]), astfel nct suma a[i]+bU] fie
pentru orice pereche.
un program care determine suma elementele perechi. De la se
citesc: n elementele celor doi vectori.
Exemplu: Pentru n=4, A=42 1 5 respectiv B=(5 3 2 6) se va
7
43
25
1 6
52
11. cifrele distincte ale unui n ordine a lor de
Exemplu: Pentru n=21223 se va 1 3 2
Solutie: Pentru codificarea datelor se vor folosi doua tablouri unidirnensionale cu indici
ntre O 9:
- vectorul a n care elementul va indica de ale cifrei i n scrierea
a x, citit ca de intrare;
- vectorul e n care elementul efi] face asocierea ntre cifra i i prin atribuirea
c] i]<c-i.
La ordonarea vectorului a se vor interschimba elementele din vectorul c.
n final, elementelor vectorului e se va face numai pentru cifrele al de
este strict mai mare dect O.
1 var p,j,i,x:1ongint;
2 a,c:array[O .. 9]of byte;
3 begin
4 read1n (x) ;
5 for r-o to 9 do ali] :=0;
6 for to 9 do c [i] : =i;
7 repeat
8 inc(a[x mod 10]);
9 x : =x div 10;
10 until
11 for i:=O to 8 do
12 for j:=i+l to 9 do
13 if (a[i]>a[j]) then begin
14 p:=a[i] ;a[i] :=a[j] ;a[j] :=p;
15 p:=c[i] r c I i l :=c[j] ;c[j] :=p;
16 end,
17 for i:=O to 9 do
18 if a[i]>O then write(c[i]);
19 end.
#inc1ude <iostream.h>
long p,j,i,x,a[lO] ,c[lO];
void main() {
cinx;
for (i=0;i<=9;i++) a[i]=O;
for (i=0;i<=9;i++) c[i]=i;
do {
a[x%lO]++;
x/=lO;
} w'hile (x!:O);
for (i=0;i<=8;i++)
for (j=i+l;j<=9;j++)
if (a [i] >a [j]) {
p=a [i] ; a [i] =a [j] ; a [j ] =p;
p=c [i] ; c [i] =c [j ] ; c [j ] =p;
}
for (i=0;i<=9;i++)
ii (a[i]>O) coutc[i]" ";
12. se cea mai de elemente consecutive de diferite.
Exemplu pentru n=8 2 4 3 3 4 7 8 2 se va 3 4 7 8
Solutie: poate avea o rezolvare de complexitate (n
3
) : Pentru
fiecare de elemente situate ntre valorile i j (l-:;'i<j-:;'n) se este
posibil de lungime ce elemente consecutive de diferite;
//lungimea secventei maximale
//pozitia de inceput a secventei
executa
n executa
truei 111c=lungimea secventei curente
i executa
2 = a[k-l] mod 2 atunci ok _ false;
pentru i _ 1, n-l
pentru j _ i+l,
lc _ j-i+l; ok
[
e n t r u k _ j+l,
c:aca a [k] mod
[
a c a ok atunci
lmax lc;
pmax - i;
1
2
3
4
5
6
7
8
9
10
11
12
13
87
88
Pentru aceasta trebuie studiate care se impun a fi efectuate la fiecare pas al
parcurgerii vectorului:
Vom opta pentru o rezolvare ceea ce o parcurgere a
elementelor vectorului a am identificat
}
for (i=prnax;i<=lrnax+prnax-1;i++)
eouta[i]" ";
#inelude <iostrearn.h>
int j,i,n,lrnax,prnax,le,pe;
int a[100];
void rnain() {
einn;
for(i=l;i<=n;i++) eina[i];
lrnax=O; lc=l; pe=l;
for (i=2;i<=n;i++) {
if (a[i]%2!=a[i-1]%2)
le++;
alse
{ lc=l; pc=i;
if (lrnax<le)
{ lrnax=lc; prnax=pc;
var a:array[l .. 100] of byte;
n,i,j,pe,prnax,le,lrnax:byte;
beg-in
readln(n) ;
for i:=l to n do read(a[i]);
lrnax:=O; le:=l; pe:=l;
for i:=2 to n do beg-in
if ali] mod 2<>a[i-1] mod 2
then ine(le)
else beg-in
le:=l;
pe:=i;
end;
if le>lrnax then beg-in
lrnax:=le;
prnax:=pe;
end;
end;
for i:=prnax to lrnax+prnax-1 do
write(a[i] , , ');
end.
13. Se doi vectori ale elemente sunt ordonate se realizeze un
algoritm prin care se realizeaza de interclasare a elementelor celor tablouri.
Solutie: Algoritmul de interc1asare parcurge elementele celor doi vectori realiznd
compararea a elementelor curente. Compararea ncepe cu elementele situate pe
prima cel mai mic fiind plasat ntr-un nou vector (C). Se cu o n
vectorul din care s-a copiat elementul plasat n C.
1. verificarea elementului curent de elementul anterior
1.1 elementul curent are paritate de elementul anterior
1.2 elementul curent are paritate cu elementul anterior
2. actualizarea maximale este posibil
n cazul,1.1 va trebui lungimea curente de elemente de
diferite. In 1.2 se lungimea curenta le devenind 1 iar
de nceput a va fi indicele curent i. efectuarea uneia din aceste se
este posibil,
1
141rpentru prnax+lrnax-1 executa
15 scrie ali];
16 '-&1
var
a,b,c:array[l .. 100]of integer;
j,k,x,i,n,m:integer;
begin
readln(n); readln(m);
for i:=l to n do read(a[i]);
for i:=l to m do read(b[i]);
i:=l; j:=l; k:=O;
while (i<=n)and(j<=m)do begin
inc(k) ;
if a[i]<b[j] then begin
c[k] :=a[i]; inc(i); end
else begin
c [k] : =b [j ]; inc ( j ); end;
end;
for i:=j to m do begin
inc(k) ;c[k] :=b[i]
end;
j:=i to n do begin
inc(k) ;c[k] :=a[j]
end;
for i:=l to m+n do write(c[i])
end.
#include <iostream.h>
int a[lOOJ,b[lOOJ,c[lOO];
int j,k,x,i,n,m;
oid main() {
cinn; cinm;
for (i=O;i<n;i++)
cina[i];
for (i=O;i<m;i++)
cinb[i] ;
i=O; j=O; k=-l;
while (i<n && j<m)
if (a [ i] <b [j ] )
c[++k]=a[i++] ;
else
c[++k]=b[j++] ;
for (i=j;i<m;i++)
c[++k]=b[i] ;
for (j=i;i<n;i++)
c[++k]=a[j] ;
for (i=O;i<m+n;i++)
coutc[i]' ';
14. un program care toate numerele mai mici dect o valoare N
(N< 30000), folosindu-se de algoritmul numit" Ciurul lui Eratostene",
Solutie: Ciurul lui Eratostene, "cerne" dintre toate numerele naturale mai mici ca N, pe
cele care nu sunt prime. Ideea n eliminarea pe rnd a tuturor multiplilor numerelor
prime. Se poate folosi un tablou unidimensional ok n care la finalul ok[i]=true
(1 pentru C/C++) i este prim false (O) n caz contrar. toate valorile sunt
considerate numere prime, deci vectorul va numai valoarea true(l). Vectorul ok va
fi parcurs ncepnd cu 2, la .,J;; (un x este prim nu are nici un
divizor mai mic dect radical din x).
ar
ok:array[2 .. 30000]of boolean;
i,j,n:integer;
egin
readln(n) ;
fillchar(ok,sizeof(ok),true) ;
for i:=2 to trunc(sqrt(n)) do
if ok[i] then begin
j:=2;
while i*j<=n do begin
ok[i*j] :=false;
inc(j) ;
end;
end;
for i:=2 to n do
if ok[i] then write(i,' ')
nd.
89
#include <iostream.h>
#include <string.h>
int ok[30000] ,i,j,n;
oid main() {
cinn;
memset(ok,l,sizeof(ok));
for(i=2;i*i<=n;i++)
if (ok[i]) {
j=2;
while (i*j<=n) {
ok[i*j]=O;
j++;
}
for (i=2;i<=n;i++)
if (ok[i]) couti' ';
90
2. Se un de Il (1l<500) numere naturale. Care este maxim de cte ori
apare n cadrul
3. Cunoscndu-se un de Il numere naturale se cere realizarea unui program care permite
elementelor care se divid cu ultimul element al
Exemplu: 1l=5 vectorul (8,4,6,9,3) se va 2
2.1.4 Probleme Dropllse
}
k=O; max=max-c1;min=min-cl;
for (i=min;i<=max;i++)
for (j=l;j<=ap[i] ;j++) {
a[++k]=i+c1;
couta [k]' ';
}
#include <iostream.h>
int a[lOOOO] ,ap[lOOOO];
int max,cl,c2,n,i,j,x,min;
oid main() {
cinclc2n;
max=c1; min=c2;
for (i=l;i<=n;i++) {
cinx; ap[x-c1]++;
if (x>max) max=x;
if (x<min) min=x;
1 ar
2 a,ap:array[O.. 10000]of integer;
3 k,max,cl,c2,n,i,j,x,min:integer;
4 bag-in
5 readln(cl,c2,n);
6 max : =c1; min: =c2;
7 for i:=l to n do bagin
8 read(x); inc(ap[x-c1]);
9 if xc-max than max : =x;
10 if x<min then min:=x
11 end;
12 k:=O; max:=max-c1;min:=min-c1;
for i:=min to max do
14 for j:=l to apei] do bagin
15 inc(k);a[k]:=i+c1;
16 write(a[k])
17 end,
18 end.
15. Se un vector ce elemente naturale din intervalul [cl..c2] ,(c2-
c1<10000; cl,c2<30000). se ordoneze valorile tabloului folosind sortarea prin
elementeCount Sort).
Solutie: lungimii destul de mici a intervalului n care se elementele, ne
putem folosi de un algoritm ce are la determinarea de a fiecarei
valori. Ne vom folosi de un vector ap n eare elementul ap[x] de al
valorii x + c1(pentru a translata indicii n domeniul [O ..c2-cl]).
Pe baza acestuia se va construi vectorul n care valorile vor fi plasate n ordine
Algoritmul are o complexitate n lungimea domeniului de al elementelor.
1. Se cunosc notele de Il elevi la extemporalul de se realizeze un
program care
a) cte note mai mici ca 5 au fost
b) care este media a notelor peste 5.
c) cte note de 7 au fost
d) care este cea mai mare
4. Se un de Il elemente numere reale. se fiecare element cu cel
mai apropiat ntreg se n ordine la primul ultimul).
Exemplu: n=6 vectorul: (2.72,4.34,9.82, 1.0,4.05,2.45) se va
2411043
5. Se un vector cu n elemente numere ntregi. se calculeze suma tuturor
elementelor pare situate pe impare n tablou.
Exemplu: n=5 vectorul (3, 4, 6, 7, 8) se va 14
6. Se un vector ce n cifre(n<10). se determine suma numerelor
formate cu cifrele din vector citite de la dreapta la stnga de la stnga la dreapta.
Exemplu: n=4 vectorul: (2, O, 4,5) se va 2045+5402=7447
7. Se un vector cu n elemente numere naturale. se fiecare element
nul cu media a numerelor din vector.
Exemplu: n=5 vectorul: (2, 0, 4, O, 3) se va 2 3 4 3 3
8. Se un vector cu n elemente numere naturale. se fiecare element
al vectorului valoarea O. Exemplu: n=3 vectorul: (2, 4, 3) se va 2 O4 O3 O
9. Se un vector cu n elemente numere reale. se toate perechile de elemente
egal de mijloc, care au parte
Exemplu: n=6 vectorul: (2.32,4.34,9.2, 1.0,4.05,2.45) se va
2.322.45 respectiv 4.34 4.05
10. elementele nenule ale unui vector ce n numere ntregi.
Exemplu: n=6 (3 O7 04 5) se va 7 O5 043
11. Se un tablou unidimensional cu n elemente numere ntregi. toate
primului element elementele
Exemplu: n=5 vectorul (3, 4, 3, 3, 8) se va 4 8
12. Se un de n caractere citite de la Care este caracterul care apare de
cele mai multe ori care este de
13. Se un vector cu n elemente numere reale. n element
negativ un element de valoare O. Elementele vor fi cu 2 zecimale. Exemplu: n=4
vectorul: (2.32, -4.34, -9.2, 1.0) se va 2.32 0.00 -4.34 0.00 -9.20 1.00
14. cea mai de elemente pozitive din cadrul unui vector.
Exemplu: n=6 vectorul: (3, -4, 3, 13, 8, -3) se va 3 13 8.
15. ce se cu elementele unui vector.
Exemplu: n=6 vectorul: (3, 13,3, 13,8, 13) se va 3 13 8.
16. pentru un de n elemente care este de al valori.
Exemplu: n=6 vectorul: (3,13,3,13,8,13) se va
133
32
8 1.
17. suma care se poate forma cu m numere distincte dintr-un vector ce
n valori ntregi. vectorul mai de m valori distincte se va
mesajul Imposibil.
Exemplu: n=6, m=2 vectorul: (3, 13,3, 13,8, 13) se va 21
91
18. se scrie un program care le circulare ale unui vector cu n elemente
ntregi. O permutare se prin rotirea elementelor vectorului cu i (i<n).
Exemplu: Pentru n=4 vectorul (2,5,3,1) se va
5312
3125
1253
19. Se un vector ce n numere reale. Vom spune elementeale sale,
o "pereche n dezordine" sunt ndeplinite simultan
i.q
a[i]>aU], unde l::::;i<n 1<j::::;n
se creeze un program care perechile n dezordine din vector lor.
Exemplu: Pentru n=4 vectorul (1, 13,2,4), se va
132
134
2
20. cifrele distincte ale unui n ordine a lor de
Exemplu: Pentru n=355222 se va 3 5 2.
21. Se un vector ce n (n<l 00) numere naturale cu valori ntre O 60000.
se ordoneze elementele pare, a afecta pe care sunt situate numerele
impare. Programul va pe ecran, vectorul ordonare. folosirea unui vector
auxiliar. Exemplu: Pentru n=7 (1,40,32,44,3,8,17), se va 1 8324034417.
22. Se un vector care n elemente de tip char. un program care
perechea de elemente egal de centru, a a codurilor
ASCII este (printre celelalte perechi).
Exemplu: Pentru n=7 elementele 'A', 'C', '8', 'E', 'z', '1', 'E' se va B z
23. un program care elementele situate ntre elementul minim maxim
dintr-un vector de ntregi. minimul maximul se pe consecutive, se va
mesajul "Nu se sortarea".
Exemplu: Pentru n=7 elementele 14, -13, 21, 1, 120, 1000,21 se va 14 -13 1 21
120100021
24. Se cunosc elementele reale ale unui vector de dimensiune 2*12. se n numere
reale prin adunarea ntregi cu a elementelor egal
de centru. numerelor se va face cu 3 zecimale.
Exemplu: Pentru n=3 numerele:2.3, 12.09.218.98021,31.05, -212.098, 12.75, se va
2.75012.098218.050
25. Se n doi vectori. se realizeze un program care
reuniunea, lor.
Exemplu: A=(2,4,1,6,7), B=(3, 4,8,9) se va
Au B =(2, 4,1,6, 7,3,8,9) ; An B=(4) ; A - B=(2,1,6,7)
92
26. Fie un tablou unidimensional ce Il numere naturale n care un singur
element nul. se realizeze un program care elementele vectorului,
efectund doar prin intermediul elementului nul (orice interschimbare are
loc ntre un element nenul cel nul)
Exemplu: Pentru vectorul (0,3,2) pot fi (3,0,2) (3,2,0)
27. Se tablouri unidimensionale A B ce Il respectiv m
elementetn-on). n B o de Il elemente (situate pe
consecutive), nu n ordine. nu 0, altfel primul
indice din B de la care se toate elementele din A.
Exemplu: Pentru n=3, m=7, A=(2,4,I) B=(3, 4, 8, 4, 2,1, 9) se va 4
28. se genereze primii n termeni ce fac parte din definit cum
primul termen 1.
x atunci 2x+1 3x+I se n
termenii nu sunt
Exemplu: Pentru 1l=6 se va :1, 3, 4, 7,10,9
29. Un are forma unui "munte", cifrele ce apar n scrierea lui
un apoi un De exemplu 2556431
este un munte. Verificati scrierea unui n (n<2.000.000.000) citit de la
regula
30. Se un tablou unidimensional A cu Il elemente ce o permutare a
I ..n. Asupra elementelor lui se vor face tipuri de n ordine de
la 1 la n, fiecare element a[i] se va interschimba cu elementul de pe i+a[i].
este mai mare dect Il, atunci se cu 1. se
vectorului la finalul
Exemplu: Pentru 1l=4 A=( 2, 4, 1,3) se va (2,4,3, 1) , deoarece se succesiv
(1,4,2,3); (1,4,2,3); (2,4, 1,3); (2,4,3, 1)
31. se din vectorul A de lungime Il, un minim de elemente, astfel nct la
final se un strict de elemente. Primul element din vectorul nu
se va Exemplu: Pentru 1l=7 A=(3, 4,8,4,2,1,9) se va (3,4,8,9)
32. Se un vector cu Il elemente naturale. se pe linii, elementele din A
grupate cifra (prima n scrierea Pe linie vor fi scrise
elemente cu
Exemplu: Pentru n=7 A=(334, 124, 21, 34, 122,1, 39) se va
1241221
21
3343439
tablou unidimensional cu Il elemente valori naturale. se ordoneze
de cifre distincte pe care le
Exemplu: Pentru n=7 A=(334, 124,21,34,222,1,39) se va
12433421 3439222 1
93
34. Se un vector cu n elemente numere reale. ordoneze elementele
valoarea lor ntregi a elementelor, iar la valori cu partea
ordonarea se va face partea
Exemplu: Pentru n=7 A=(3.34, 12.4,3.4],3.04, ]2.8,1.3,3.9) se va 1.3,3.9,3.41,
3.34,3.04, 12.8, 12.4
35. un tablou unidimensional ce un par de elemente (2*n).
cu aceste valori un de Il a este Fiecare se va
pe cte o linie printr-o pereche de numere reprezentnd n ordine -
numitor". Exemplu: Pentru ll'=3 A=(3, ]2,2],34,2,39) se va
343
21 12
392
36. Se un vector ce n elemente ntregi. n element precedat
de un element de semn contrar se 'introduce un element pozitiv, a valoare este
prin alipirea cifrelor celor numere de semne contrare, n ordine. se
vectorului efectuarea cerute.
Exemplu: Pentru n=6 A==(3,-I, 73, 5, -9, 2) se va 3, 31,-1,173,73,5,59, -9, 92, 2
37. Fie un tablou unidimensional cu 2*1l elemente valori naturale. Din vector sunt pe
rnd elemente din k n k de va face cu revenire la prima n
cazul n care indicele curent este mai are dect Il. se de Il ori. Determinati
de nceput a astfel nct elementele suma Se va
de nceput a suma elementelor n vector. A
Exemplu: Pentru n==3, k==3 A==(3, 10, 15, 4, 2, 10) se va 2 35. Incepnd
de la 2, au fost n ordine elementele de pe 4,1,5.
38. Se un tablou unidimensional cu n(<100) elemente naturale, se determine
minim de strict de valori consecutive n care poate fi
vectorul. Prin se ntelege o de elemente din vectorul ce nu
se pe consecutive.
Exemplu: Pentru 1l=7 A=(3, 10,4,4,5, 1],6) se va 3 (345 6; 10 Il; 4)
39. Se un tablou unidimensional cu nIOO) elemente ntregi. se determine
toate de elemente de pe consecutive, care au suma cu S. Fiecare
de elemente va fi pe cte o linie pe standard.
Exemplu: Pentru 1l==7, 8=9 vectorul (3, 2, 3, 4, 5, l l , -7) se va
234
45
511-7
40. Fie un tablou unidimensional cu Il elemente valori naturale. se determine o
de elemente din tablou, pentru care suma elementelor este CUII.
Exemplu: Pentru 1l=7 A=(3, 6, 4, 2, ] 1, 5, I l , 6) se va 6, 4, 2,] ],5
41. Se doi vectori de lungimeIl respectiv mce elemente naturale ordonate
Se cere interclasarea valorilor pare din cei doi vectori. n urma
elementele vor fi plasate ntr-un nou vector.
Exemplu: Pentru n==8, m==5, A==(13, 26, 44, 54, 112, 115,311,600) 8==(3,28,48,55,56) se
va 26, 28, 44, 48, 54, 56, 112, 600
42. Fie un tablou unidimensional cu 2" elemente valori naturale. Din acesta se poate
un alt vector B cu 2,,1 elemente astfel: Elementul b[l] se va fi egal cu produsul a[l] *a[2],
b[2] cu produsul a[3]*a[4] se poate aplica n continuare asupra
vectorului B. Practic, ea se poate efectua succesiv de cel mult n ori asupra vectorului
la pasul precedent. un program care ct timp toate
elementele sunt mai mici ca un S(citit de la intrarea standard).
elementele n final n vector.
Exemplu: Pentru S=200 A=(l, 2, 4, 5, 2, 5, 3, 6) se va 40 180. Din vectorul
s-a vectorul (2,20, 10, 18), iar la pasul (40 180))
43. Se un tablou unidimensional cu n(<100) elemente ntregi (pozitive/negative).
Avem la K( <n) semne minus (-) pe care vom folosi pentru schimbarea semnelor
la K elemente din vector. Nu se pot folosi semne minus pentru un singur element.
produsul maxim care se poate cu n-I elemente din vector ce s-au
schimbat semnele la k elemente valorile care au fost
Exemplu: Pentru k=6 A=(- 4, 2,6,3,6) se 4320.
4*(-5)*2*(,;6)*(-3)* (6).
44. Se 1, 3, 4, 7, 8, 10, 11, 15, 16, 18, 19, 22, 23, 25, 26, 31,
32 .... se determine al n-lea termen al
Tabloul bidimensional
2.2.1 Teste cu alegere
1. var a:array{l.. 10,1..lO}of byte (varianta Pascal), respectiv int
a{lOj{lO} (varianta C/C++). care din de elemente ale
variabilei a sunt incorecte:
a) a[2*3]
b) a[2*3,3-2]
e) a[lO] 1[1]
d) a[lO,lO]
a) a[2*3]
b) a [2*3] [3-2]
e) a[lO,l]
d) a [9] [9]
Care din sunt incorecte sintactic?
a) a:array[1. .10] [1. .10]a! ehar
b) a:array[2 ... 1013 ... 10Ja! real
c ) a: array [ 'a' .. ' z ' ,1 .. 5] of
d) a:array[l .. 5, .. 9]of ehar
a ) ehal:' a [ 1 . . 10] [1. . 10 ]
b) float a[2 ... 1013 ... 10]
e) float a[26] [5]
d) ehar [5] [9]
Care dintre variante unui tablou bidimensional cu 5 linii
5 coloane ale elemente sunt de tip real?
) a:array[O .. 5,0 .. 5Jof real
b) a:array[10 .. 14,1 .. SJof real
c) a:arraY['a
/
. . 'e
l
I '45]of real
d) a:array['O' .. '5' ,1 .. 5Jof ehar
) !loat a[6] [6]
b) float arS] [5J
e) double a[5] [5]
d) ehal:." a [6] [5]
95
Care dintre variantele corect un element din cele tablouri situat
pe linia a treia coloana a doua?
6. un tablou cu n linii In coloane. Cte elemente sunt situate pe marginea
tabloului (prima ultima linie, prima ultima
5. un tablou cu n linii In coloane n care toate elementele primei linii sunt
nule. nu alt element egal cu zero (nesituat pe prima linie), cte elemente
nenule sunt n tablou?
d) 2*n+2*m-2
d)n*m-m
b) for (i=O;i<n;i++)
nr=O;
for (j=O;j<n; j++)
if (a[i] [j]==O) nr++;
cout nr;}
d) for (i=O;i<n;i++)
nr=O;
for (j=n-1;j>=O;j--)
if (a[i] [j]==O) nr++;
cout nr;}
c) for (i=n-1;i>=O;i--)
nr=O;
for (j=n-1;j>=O;j--)
if (a[i] [j]==O) nr++;
cout nr;}
a) nr=O;
for (i=O;i<n;i++){
for (j=O;j<n;j++)
if (a[i] [j]==O) nr++;
cout nr; }
c)n*m-n
c)2*n+2*m-4
I
unsigned char a [ 5] [5] ;
float b[5] [5];
96
b) (m+n)-m
b) m*n-2*n-2*m
c) for i:=n downto 1 do begin
nr:=O;
for j:=n downto 1 do
if a[i,j]=O then inc(nr);
write(nr) end;
d) for i:=l to n do begin
nr:=O;
for j:=n downto 1 do
if a[i,j]=O then inc(nr);
write (nr) end;
b) for i:=l to n do begin
nr:=O;
for j:=l to n do
if a[i,j]=O then inc(nr);
write(nr) end;
a) 2*m+2*n
7 Care dintre variante n mod corect de elemente nule de
pe fiecare linie a unei matrici de ordin n? rezultatelor trebuie
ncepnd cu prima linie.
a) nr:=O;
for i:=l to n do begin
for j:=l to n do
if a[i,j]=O then inc(nr);
write(nr) end;
a) (m+n)-n
a) a[2,3] a) a [2] [3]
b) a [3,2] b) a [3] [2]
c) b[3,2] c) b[ 'c'] [2]
d) b[ "c ' ,2] d) b[2] [1]
e) a[2,1] e) a [2] [1]
f) b[ 'c', 'b'] f) b[ 'c'] ['b']
4.
var a:array[O .. 4,O .. 4]of byte;
b:array['a' .. 'e' ,1 .. 5]of real;
11. Care dintre unui tablou bidimensional cu 10
linii 20 coloane componente de tip real:
123
456
789
8. var a: array[l ..3,l..3]of byte; (varianta Pascal), respectiv nt
a[3][3]; (varianta C/C++). care va fi tabloului
de
d) 1 2 3
212
3 2 1
a) typedef float m[10][20] matrice;
matrice mat;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
ari] [j]=abs(i-j);
c) O 1 2
101
210
97
b) 1 1 1
111
111
a) type matrice:
array[l .. 10,1 .. 20]of real;
var mat=matrice;
a) for i:=l to 3 do a) for (i=0;i<3;i++)
for j:=l to 3 do . for (j=O; j<3; j++)
a[i,j] :=abs(i-j); ari] [j]=abs(i-j+2);
b) for i:=l to 3 do b) for (i=0;i<3;i++)
for j:=l to 3 do for (j=O; j<3; j++)
a li, j] : = i+j; ari] [j]=i+j+2;
c) for i:=l to 3 do c) for (i=0;i<3;i++)
for j:=l to 3 do for (j=0;j<3;j++)
a[i,j]:=i*j; ari] [j]=(i+1)*(j+1);
d) for i:=l to 3 do d) for (i=0;i<3;i++)
for j:=l to 3 do for (j=O; j<3; j++)
a li, j] : = (i-1)*3+j; ari] [j]=i*3+j+1;
a) 1 1 1
222
333
for i:=l to 3 do for (i=0;i<3;i++)
for j:=l to 3 do a[i,j] :=i+j; for (j=0;j<3;j++) ari] [j]=i+j+2;
a) 2 2 2 b) 2 3 4 c) 2 2 2 d) 2 3 4
4 4 4 2 3 4 3 3 3 3 4 5
6 6 6 2 3 4 4 4 4 4 5 6
\1"
10. var a : arrayl l ..3,l ..3]of byte; 1, J: byte (varianta Pascal),
respectiv int i, i a[3][3J; (varianta C/C++). Care sunt necesare pentru ca
tabloul a elementele:
for i:=l to 3 do
for j:=l to 3 do
a [ i , j] : =abs ( i - j ) ;
9. var a : array[1..3,1..3Jaf byte; i, j: byte (varianta Pascal),
respectiv nt i, j, a[3J[3J; (varianta C/C++). care va fi tabloului
de
13. O matrice este de diagonala pentru orice pereche
de indici ( i , j ):
14. Se de program n care a este o matrice cu n linii
n coloane, iar t.i. k l sunt variabile de tip ntreg:
12. Care dintre de mai jos interschimbarea a linii, li respectiv i2,
ale unei matrice cu n linii m coloane de numere ntregi?
for (i=l;i<=n;i++)
for (j=l;j<=nij++) eina[i] [j];
i=2;
j=n-1;
for (1=1;1<=n/2;1++)
for(k=i;k<=j;k++)
eouta[l] [k]/I ";
eoutendl;
i++;
j--i
}
a) a[i][j ]==-a[j ][i];
b) a[i][j]==l/a[i][j];
c ) a[i][j ]==a[j ][i];
d) a[i][j]!=a[i][j];
98
for i:=l to n do
for j:=l to n do read(a[i,j]);
i:=2i
j:=n-1i
for 1:=1 to n div 2 do begin
for k:=i to j do
write(a[l,k],' 'li
writelni
ine (i);
dee (j);
end;
a) ari, j]=-a[j, il;
b) a[i,j]=l/a[i,j]i
c ) a[i,j]=a[j,i];
d) a[i, j]<>a[i, j];
a) for j:=l to m do a) for (j=0; j<m; j ++)
a[ll, j]: =a[12, j]; a[ll)[j ]=a[12)[j];
b) for j:=l to n do b) for (j=Oij<nij++)
a [12, j] : =a[ll, j]; a[12)[j ]=a[ll][j] i
e) for j:=l to n do begin e) for (j=O i j<n; j++)
aux: =a[ll, j]; aux=a[ll)[j] ;
a[ll, j]: =a[12, j]; a[ll)[j ]=a[12][j];
a[12, j]: =aux; a[12)[j ]=aux;
end; }
d) for j:=l to m do begin d) for (j=Oij<mij++)
aux : =a[ll, j]i aux=a[ll)[j];
a[ll, j]: =a[12, j]i a[ll)[j ]=a[12][j] i
a[12, j]: =aux; a[12][j ]=auxi
endi
b) var mat: array[l .. 10,1 .. 20] of b) float mat[10][20];
real;
e) var mat: array[l .. 20,1 .. 10] of e) int mat[20][10];
integer;
d) var mat: array[l .. 10,1 .. 20] of
d) double mat [10] [20];
extended;
de mai jos
a) elementele matricei a aflate att strict sub diagonala ct strict sub
diagonala
b) elementele matricei a aflate strict deasupra diagonalei secundare;
c) elementele matricei a aflate att strict deasupra diagonalei secundare, ct strict
deasupra diagonalei principale;
d) elementele matricei a aflate strict deasupra diagonalei principale;
15. Se de program n care a este o matrice cu n linii
n coloane, iar i, j k sunt variabile de tip ntreg:
k:=-li
for i:=l to n do begin
if k=-l then
for j:=l to n do
write(a[i,j],' ')
else
for downto 1 do
write(2*a[i,j], , ')i
k:=k*(-l)i
endi
k=-li
for(i=lii<=nii++)
if (k==-l)
for(j=lij<=nij++)
eouta[i] [j]" "i
else
for(j=nij>=lij--)
eout2*a [il [j] " "i
k*=-li
}
d)
123
234
543
e)
123
234
345
executarea de program de mai sus au fost valorile l 2 3 8 6
4 3 4 5 matricea a are 3 linii 3 coloane, care dintre tablourile de
mai jos matricea a.
a) b)
321 123
864 567
543 345
16. Se de program n care a este o matrice cu n linii
n coloane, iar i j sunt variabile de tip ntreg:
for i:=l to 4 do
for j:=l to 4 do
if i<=j then a[i,j] :=i
else a [i, j] : =j i
for(i=lii<=4ii++)
for(j=lij<=4ij++)
if(i<=j) ali] [j]=ii
else ali] [j]=ji
care dintre variantele de mai jos matricea a executarea
de mai sus.
a) b) e) d)
1 1 1 1 1 1 1 1 1 2 3 4 1 1 1 1
2 2 2 2 1 2 2 2 1 2 3 3 2 2 2 1
3 3 3 3 1 2 3 3 1 2 2 2 3 3 3 2
4 4 4 4 1 2 3 4 1 1 1 1 4 3 2 1
17. a este un tablou unidimensional de numere ntregi n lungimea sa, iar aux este o
de tip ntreg ce efect are
for i:=l to n-l do
if (a[i]>a[i+l]) begin
aux:=a[i]i
ali] :=a[i+l] i
a[i+l] :=aUXi .
endi
for (i=Oii+l<nii++)
if (a [ i] >a [i+1]) {
aux=a[i]i
a[i]=a[i+1] i
a[i+1]=auxi
}
99
18. Se
2.2.2 Teste cu itemi semiobiectivi
19. Care din variante o a unui tablou
unidimensional cu 10 de componente de tip caracter:
d) programul n limbajul de
programare studiat Pascal/C/C++.
c) exemplu de set de date de intrare
pentru care se va un un de valori
reprezentnd suma elementelor pe
fiecare linie.
a) Ce se va pentru n=2, m=3
tabloul A cu elementele citite n ordine
pe linii: 12, 40, 51, 44,654, 33?
b) un exemplu de set de date de
intrare pentru care se va un de
valori
a) char mat[l .. 10];
b) char mat [10] ;
e) mat[lO] of char;
d) char[lO];
100
intreg i,n, x, a[lO] [10];
citeste n, m;
[
e n t ru i <- 1, n executa
rpentru j <- l,m executa
la citeste a[i,j];
entru i 1, n executa
x <- O;
rpentru j <- 1, m executa
la x <- X + a[i,j] mod 10;
scrie X;
stop.
1. Se program pseudocod:
a) var mat: array[l .. 10] of byte;
b) var mat: array[l .. 10] of char;
e) var sir[1. .10] of char;
d) var s ir=array[1. . 10 ] of char;
vectorul x a fost folosit pentru liniarizarea matricei a. Care dintre elementele din x
elementul de pe linia i coloanaj din matricea a:
a) xli * 10 + j -1]
b) x[(i-l) * 10 + j - 1]
c ) x I i * 10 + j]
d) x[(i-l) * 10 + j]
var a:array[O .. 9,0 .. 9]of integer; Iint a[lO] [10], x[lOO];
x:array[O.. 99] of integer;
a) elementele tabloului
b) elementele tabloului astfel nct la final cel mai mare element se pe
ultima a tabloului
c) elementele tabloului astfel nct la final cel mai mic element se pe
prima a tabloului
d) elementele de pe pare cu cele de pe impare
2. Se program pseudocod:
c) exemplu de set de date de intrare
pentru care se va valoarea O.
e) programul n limbajul de
programare studiat Pascal/C/C++, pentru
algoritmul realizat la punctul d)
b) Care este valoarea pe care o
poate lua variabila max? un
exemplu de set de date de intrare pentru

a) Ce se va pentru n=3, m=3
tabloul A cu elementele citite n ordine
pe linii: 15,40,51,44, 12,33,2,33, 5?
d) algoritmul astfel nct
coloanei pe care s-a
valoarea a variabilei max.
max;
1 intreg i,n,j,max,x, a[10] [10];
2 citeste n,m;
[
ent ru i n executa
rpentru j executa
L. ci teste a [ i , j ] ;
max O;
pentru j m executa
x O;
[
ent ru i 1,n executa
raaca a[i,j] mod 3=0 atunci
la. x x + 1;
x>max atunci max x;
3. Se program pseudocod:
+- ii
> max atunci
intreg i, n, linie, x,
max , a [iO] [10] ;
citeste n, m;
[
ent ru i 1, n executa
rpentru j 1, m executa
L. citeste a u , j] ;
max O;
linie O;
pentru i 1, n executa
x O;
[
ent ru j 2, m executa
raaca a[i,j]=a[i,l] atunci

rdaca x
I max x;
Ll.linie
scrie linie, max;
stop.
a) Ce se va pentru n=3, m=4
tabloul A cu elementele citite n ordine
pe linii: 7, 7, 3, 2,34,3,3,2,2,2,4, 2?
b) Care este valoarea pe care o
poate lua max? un exemplu de set
de date de intrare pentru
c) exemplu de set de date de intrare
pentru care se vor valorile 00.
d) algoritmul astfel nct
produsul elementelor situate pe
linia pe care s-a valoarea a
variabilei max.
e) programul n limbajul de
programare studiat Pascal/C/C++, pentru
algoritmul realizat la punctul d)
101
5. Se program pseudocod:
4. Se program pseudocod:
a) Ce valori vor fi pentru n=4
m=4?Dar pentru n=4 m=!?
b) un exemplu pentru datele de
intrare, astfel nct de elemente
nenule din matrice fie egal cu
de elemente nule.
c) n de n m care
este de valori nule din tablou?
d) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce se va la intrare vor fi
introduse valorile: n=4 m=3 ?
b) Ce se va
i,j}- devine afi,j} <-n*m-k+1?
c) algoritmul astfel nct
elementele tabloului fie completate pe
coloane

d) Ce se va
pentru de pe linia 9 devine pentru
j<-l,m executa
e) programul n limbajul de
programare studiat PascallC/C++, pentru
algoritmul realizat la punctul c),
a) Ce se va pentru n=4?
b) Ce se va
<- j devine <- i?
c) algoritmul astfel nct
elementele n cadrul unei linii fie
egale cu liniei respective.
d) programul n limbajul de
programare studiat PascallC/C++, pentru
algoritmul realizat la punctul c).
e) algoritmul astfel nct
elementele matricei fie completate, n
ordine, pe coloane cu primele n
2
numere
pare.
intreg i, n, j, a[10] [10]i
oiteste ni
[
ent ru j .... 1, n exeouta
.... :,n exeouta

[
ent ru i .... 1, n exeouta
j .... 1,n exeouta
l. sorie a [i , j ] i
stop.
intreg i,n,m,j,a[10] [10] i
oiteste n, mi k .... O;
pentru i .... 1, n exeouta
aoa i mod 2 = 1 atunoi
j .... 1, m exeouta
l. k.... k+ 1; a[i,j] .... k;
altfel
j ....m,l,-l exeouta
l.k....k + 1; a[i,j] .... k;
[
ent ru i .... 1, n exeouta
j .... 1,n exeouta
l. sorie a [i , j ] i
stop.
102
intreg i, n, j, m, a[100] [100]i
oiteste n, mi
[
ent ru i .... 1, n exeouta
. j :' m exeouta
l.
[
ent ru i .... 1, n exeouta
j .... 1, i exeouta
l. a [i,m-j+1] .... O;
6. Se program pseudocod:
b) n functie de n pentru
cte elemente din matrice a fost
suma?
c) de pe liniile
9 10 astfel nct fie suma
elementelor dispuse simetric de linia
de mijloc a tabloului?
d) programul n limbajul de
programare studiat Pascal/C/C++.
a) Ce se va pentru n=4 tabloul A
cu elementele citite n ordine pe linii: 1,
2,3,4,4,3,2,1,1,2,3,4,4,3,2,1,?
1 intreg i, n , , j, s , a [100] [100] ;
citeste n;
3 s..- O;
4 [entru i ..- 1, n executa
5 centru j ..- 1, n executa
6 citeste a[i,j];
7
[
ent ru i..-1, (n+1) div 2 exec.
rpentru j ..- i, n-i+1 executa
l.s .... s+a[i,j];
scrie s.
7. Se program pseudocod:
8. Se program pseudocod:
intreg i, n , , j, p, a [100] [10 O] ;
citeste r;;i
p ..- 1;
[
ent ru i ..- 1, n executa
rpentru j .... 1, n executa
l. citeste a [i, j] ;
[
ent ru j .... 1, (n+1)div 2 exec.
i .... j, n-j+1 executa
l. p..- p * a[i,j];
scrie p.
a) Ce se va pentru n=4 tabloul A
cu elementele citite n ordine pe linii: 2,
2,2,2,3,3,3,3,4,4,4,4,5,5,5,5, ?
b) n de n pentru
cte elemente din matrice a fost calculat
produsul?
c) de pe liniile
9 10 astfel nct fie suma
elementelor dispuse simetric de
coloana de mijloc a tabloului?
d) programul n limbajul de
programare studiat Pascal/C/C++.
9. Se program pseudocod:
intreg i, n, ,j, m, A[100,100];
citeste n;
m ..- O;
'
pent ru i ..- 1, n executa
j
ent ru j ..- 1, n-i+1 executa
m ..- m + 1;
Ll. a (i, j] ..- m;
'
pent ru i .... n, 2, -1 executa
r
pent ru j..- n,n-i+2,-1 exec.
m .... m + 1;
Ll. a [ i, j] ..- m;
a) Care vor fi elementele tabloului A
pentru n=4?
b) o valoare a lui Il astfel
nct elementele fie ordonate
pe linii?
c) limitele de ciclare ale
de pe linia 5 astfel nct
elementelor de pe diagonala
nu li se atribuie nici o valoare?
d) programul n limbajul de
programare studiat Pascal/C/C++.
103
1. elementele unui tablou bidimensional de ordin n, sub forma unor
concentrice de valori consecutive, ncepnd cu 1. Exemplu: Pentru n =4 elementele
tabloului vor fi:
Trebuie traversate un de (n+l)div 2 concentrice. Algoritmul va
parcurge succesiv traversnd simultan cele linii (latura de sus - latura de
jos) respectiv cele coloane (latura - latura .
cinn;
for (r=l;r<=(n+l)/2;r++) {
for (j=r;j<=n-r+l;j++) {
a[r-l] [j-l]=r;
a[n-r] [j-l]=r;
}
for (i=r+l;i<=n-r;i++) {
a[i-l] [r-l]=r; ali-lI [n-r]=r;
}
}
for (i=O;i<n;i++) {
for (j=O;j<n;j++)
cout(int)a[i] [j];
coutendl;} }
2.2.3 Probleme rezolvate
a) Care vor fi elementele tabloului A
pentru n = 4?
b) o valoare a lui n astfel
nct elementele pe linii formeze
monoton sau

c) de atribuire
de pe linia 5 astfel nct, completnd
elementele cea mai
valoare din matrice fie O.
d) programul n limbajul de
programare studiat Pascal/C/C++.
#include <iostream.h>
unsigned char a[lO] [10];
int n,i,j,r;
void main() {
104
readln(n) ;
for r:=l to (n+l)div 2 do begin
for j:=r to n-r+l do begin
a[r,j] :=r; a[n-r+l,j] :=r;
end;
for i:=r+l to n-r do begin
a[i,r] :=r; a[i,n-r+l] :=r;
end;
end;
for i:=l to n do begin
for j:=l to n do write(a[i,j]);
writeln
end;
a:array[l .. 10,l .. lO]of byte;
n,i,j,r:integer;
111 1
1221
122 1
1 1 1 1
intreg i, n , ,j, m,a[lOO] [100];
citeste n;
[
e n t ru i - 1, n executa
rpentru j - 1, n executa
La a[i,j] - li-jl+l;
[
e n t ru i _ 1, n executa
rpentru j - 1, n executa
La scrie a [ i , j ] ;
10. Se program pseudocod:
Solutie: Algoritmul pentru orice pereche de linii sunt monotone. Pentru
aceasta se n variabila mt de monotonie dintre primele elemente.
Toate celelalte 1Il-1 perechi de elemente de pe cele linii trebuie
monotonie.
3 o pereche de linii
se va
1
Liniile 1
monotone.
2. Se un tablou bidimensional cu n linii m coloane. se determine de
perechi de linii monotone. linii se numesc monotone oricare pereche de
elemente ale lor situate pe monotonia elementelor de pe prima

Exemplu:
Pentru n=3, 1Il=4
matricea A :
8676
2147
4235
a:array[1 .. 10,1 .. 10]of byte;
n,l,i,j,nr,m:integer;
mt,ok:boo1ean;
read1n (li, m) ;
nr:=O;
for i:=l to n do
for j:=l to m do read(a[i,j]);
for 1:=1 to n-1 do
for i:=l+l to n do begin
mt:=a[l,l]<a[i,l] ;
ok:=true;
for j:=2 to m do
if (a[l,j]<a[i,j])<>mt then
ok:=fa1se;
if ok then inc(nr);
end;
write1n(nr);
#include <iostream.h>
unsigned char a[10] [10];
int n,l,i,j,nr,m,mt,ok;
void main() {
cinnm; nr=O;
for (i=O;i<n;i++)
for (j=O;j<m;j++)cina[i] [j];
for (l=O;l+l<n;l++)
for (i=l+l;i<n;i++) {
mt=a[l] [O]<a[i] [O]; ok=l;
for (j=l;j<m;j++)
if ((a[l] [j]<a[i] [j]) !=mt)
ok=O;
if (ok) nr++;
}
coutnr;
3. Se un tablou bidimensional ce pe fiecare din cele n linii cte o
de m elemente. se realizeze un program care perechea de cu
de cardinal maxim. Se va numerele de ordine ale liniilor din pereche.
Exemplu: se va
Pentru n=4, 1Il=4 1 3
matricea A:
8679
2145
9278
4237
Solutie: Algoritmul perechea de linii cu n O(n
4
) . Pentru
oricare linii, toate elementele de pe una dintre ele sunt pe
contorizndu-se de elemente comune.
105
Solutie: Algoritmul perechea de linii cu reuniune nO(n
4
) . Pentruoricare
linii, se reuniunea lor are cardinalul egal cu 2 * m, nu au elemente
comune. Orice element comun care este identificat cardinalul reuniunii cu o
unitate.
4. Se un tablou bidimensional ce pe fiecare din cele fl linii cte o
de m elemente. se realizeze un program care perecheade cu
reuniunea de cardinal maxim. Se va numerele de ordine ale liniilordin pereche.
Exemplu: se va
Pentrun=4, m=4 1 2
matriceaA :
8679
2145
9278
4237
#include <iostream.h>
int a[lO] [lO],n,l,i,j,nr,m,max,
c,x,y,ti
void main ()
cinnmi
max=Oi
for (i=Oii<nii++)
for (j=Oij<mij++)cina[i] [j] i
for (i=Oii+l<nii++)
for (j=i+lij<nij++)
nr=Oi
for (c=Oic<mic++)
for (t=Oit<mit++)
if (a[i] [c]==a[j] l t l ) nr++i
if (nr>max) {max=nrix=iiy=ji}
}
coutx+l' 'y+lendl i
#include <iostream.h>
int a[lO] [10] ,n,l,i,j,nr,m,max,
c,x,y,ti
void main()
cinnmi
max=Oi
for (i=Oii<nii++)
for (j=Oij<mij++)
cina [ i] [j] i
for (i=Oii+l<nii++)
for (j=i+lij<nij++)
nr=2*mi
for (c=Oic<mic++)
for (t=Oit<mit++)
if (a[i] [c]==a[j] [t] )nr--i
if (nr>max){max=nrix=iiy=ji}
}
coutx+l' 'y+lendli
}
106
a:array[l .. 10,1 .. 10]of bytei
n,l,i,j,nr,m,max,c,x,y,t:bytei
readln(n,m)i max:=Oi
for i:=l to n do
for j:=l to m do read(a[i,j]) i
for i:=l to n-l do
for j:=i+l to n do begin
nr:=Oi
for c:=l to m do
for t:=l to m do
if a[i,c]=a[j,t] then inc(nr)i
if nr>max then begin
max:=nri X:=ii y:=ji
endi
endi
writeln(x, , ',y) i end.
var
a:array[l .. lO,l .. 10]of bytei
n,l,i',j,nr,m,max,c,x,y,t:bytei
begin
readln(n,m)i max:=Oi
for i:=l to n do
for j:=l to m do read(a[i,j]) i
for i:=l to n-l do
for j:=i+l to n do begin
nr:=2*mi
for c:=l to m do
for t:=l to m do
if a[i,c]=a[j,t] then dec(nr)i
if nr>max then begin
max:=nri X:=ii y:=ji
endi
endi
writeln(x, , ',y)i
end.
se va
8679
4237
5. Fie un tablou bidimensional de n linii m coloane. se toate liniile care ncep
cu un element ce se pe prima linie. Valorile elementelor sunt naturale mai mici
dect 1000.
Exemplu: Pentru n=4, m=4
matricea A :
8679
7 145
9278
4237
Algoritmul un vector suplimentar s cu indici mai mici ca lOOO, ale
elemente sunt Osau 1. Astfel, s[i]=l valoarea i se pe prima linie n matrice.
unei linii x se face prin deplasarea tuturor liniilor x+1,... n CU! o mai sus.
Valoarea variabilei i care linia n prelucrare, se cu o unitate,
numai linia nu a fost Fiecare de este de o
decrementare a de linii a tabloului.
var
a:array[1. .10,1. .10]of byte;
s:array[0 .. 1000]of byte;
n,l,i/j,nr,m:integer;
begin
readln (n/fu) ;
for i:=l to n do
8 for j:=l to m do read(a[i,j]);
9 for i:=l to m do s[a[l,i]] :=1;
10 i:=2;
11 while i<=n do
12 if s[a[i/1]]= 1 then begin
13 for 1:=i+1 to n do
14 for j:=l to m do
15 a[l-l,j] :=a[l/j];
16 dec (n); end
17 else inc(i);
18 for i:=l to n do begin
19 writeln;
20 for j:=l to m do write(a[i,j])
21 end; end.
#include <iostream.h>
int a[10] [10],s[1001];
int n,l,i,j,nr,m;
void main() {
cinnm;
for (i=O;i<n;i++)
for (j=O;j<m;j++)cina[i] [j];
for (i=O;i<m;i++) s[a[O] li] ]=1;
i=l;
while (i<n)
if (s[a[i] [O] ]==1) {
for (1=i+1;1<n;1++)
for (j=O;j<m;j++)
a [1-1] [j] =a [1] [j] i
n--; }
else i++;
for (i=O;i<n;i++)
coutend1;
for (j=O;j<m;j++)
couta[i] [j]' 'i
} }
6. Fie un tablou bidimensional de n linii m coloane. se realizeze un program care
n linii ale elemente sunt ordonate sau o
linie cu elemente egale cu valoarea de pe linia
Exemplu: se va 8 8 8 8
Pentru n=2, m=4 1 4 5 8
matricea A: 9999
1458 9852
9852
Inserarea unei linii i se face prin deplasarea tuturor liniilor ncepnd cu Il, n-l, ... i
cu o mai jos. Valoarea variabilei i care linia n prelucrare, se
cu o unitate nu s-a efectuat inserarea unei linii, sau cu
s-a inserat o linie pe
107
Fiecare de inserare este de o incrementare a de linii a tabloului.
Solutie: Algoritmul matricea folosind vectorul auxiliar v. Astfel, oricare
element al tabloului bidimensional a[ij] se va n vector pe (i-l)*m+j.
#include <iostream.h>
unsigned char a[10] [10]:
int ok,w,n,l,i,j,m,c,v;
void main() {
cinnm:
for (i=O:i<n;i++)
for (j=O:j<m:j++)
c ina [ i] [j] :
i=O;
while (i<n) {
ok=a[i] [O]<a[i] [1]: w=l:
for (j=1;j+1<m;j++)
if ((a[i] [j]<a[i] [j+1]) !=ok)
w=O:
if (w) {
for (1=n-1:1>=i:l--)
for (c=O:c<m:c++)
a [1+1] [cI =a [1] lc l :
if (ok) v=a[i] [m-1] :
else v=a[i] [O]:
for (c=O:c<m;c++) ari] [c]=v:
n++:
i+=2:
} else i++:
}
}
#include <iostream.h>
unsigned char a[10] [10],v[100]:
int n,x,i,j,m:
void main() {
cinnm:
for (i=O:i<n:i++)
for (j=O:j<m;j++)
cina [ i] [j] :
se va :9 8 7
654
32 1
108
var
a:array[l .. 10,1 .. 10]of byte:
ok,w:boolean:
n,l,i,j,m,c,v:integer:
begin
readln (n,m) :
for i:=l to n do
for j:=l to m do read(a[i,j]):
i:=l:
while i<=n do begin
ok:=a[i,l]<a[i,2] :
w:=true:
for j:= 2 to m-1 do
if (a[i,j]<a[i,j+1])<>ok then
w:=false;
if w then begin
for l:=n downto i do
for c:=l to m do
a [1 +1, c] : =a [1, c] :
if ok then v:=a[i,m]
elee v:=a[i,l]:
for c:=l to m do a[i,c] :=v:
inc(n) :
inc(i,2)
end
else inc(i):
end:
end.
1 var
a:array[l .. 10,1 .. 10]of byte:
v:array[l .. 100]of byte:
n,x,i,j,m:integer;
begin
readln (n .m) :
for i:=l to n do
for j:=l to m do
read (a [ i , j ] ) :
7. Se un tablou bidimensional A(n,m) cu elemente ntregi. un program
care elementele tabloului, prin intermediul unui vector de n*m elemente:
Exemplu:
Pentru n=3, m=4
matricea A :
123
456
789
se va
427
2 5
10 789
}
}
#include <iostream.h>
int a[10] [10];
int n,b,i,j,m,nr;
void main() {
cinnm;
for (i=O;i<n;i++)
for (j=O;j<m;j++)
cina [ i] [j] ;
for (i=O;i<n;i++) {
b=a[i] [O]; nr=O;
for (j=l;j<m;j++)
if (a[i] [j]>b) b=a[i] [j];
b++;
for (j=O;j<m;j++)
nr=nr*b+a[i] [j];
coutb' 'nrendl;
}
}
for (i=O;i<n;i++)
for (j=O;j<m;j++)
v [i *m+j] =a [i] [j] ;
for (i=O;im*n)/2;i++) {
x=v[i]; v[i]=v[m*n-i-1];
v[m*n-i-1]=x;
}
for (i=O;i<n;i++)
for (j=O;j<m;j++)
a [i] [j] =v [i *m+j] ;
for (i=O;i<n;i++) {
coutendl;
for (j=O;j<m;j++)
couta[i] [j];
109
var
a:array[l .. 10,1 .. 10]of byte;
n,b,i,j,m,nr:integer;
beg-in
readln(n,m} ;
for i: =1 to n do
for j:=l to m do read(a[i,j]};
for i: =1 to n do begin
b: =a [i, 1] ;
nr:=O;
for j:=2 to m do
if a[i,j]>b then b:=a[i,j];
inc(b} ;
for j :=1 to m do
nr:=nr*b+a[i,j];
writeln(b,' ',nr);
end;
end.
ie: n scrierea unui n baza b se folosesc cifrele O..b-l. Algoritmul
entul maxim de pe fiecare linie, iar baza este mai mare cu o unitate
racesta.
for i: =1 to n do
for j :=1 to m do
v [ (i -1) *m+j ] : =a [ i , j ] ;
i:=l to m*n div 2 do begin
:x:: =v [i] ;
vei] :=v[m*n-i+1];
v[ro*n-i+1] :=X;
end;
i:=l to n do
for j:=l to m do
a [i, j ] : =v [ (i-1) *m+j] ;
for i: =1 to n do begin
writeln;
for j :=1 to m do write(a[i,j])
end;
end.
un tablou bidimensional A(n,m) cu elemente n cifrelor 0..9.
un program care pentru fiecare linie, baza n care cifrele
ective pot reprezenta un Considernd pe linie este descris n un
valoarea la conversia lui n baza 10. Pentru fiecare linie se va
baza valoarea conversie.
110
Solutie: Se vor plasa ntr-o matrice de coloane, pentru fiecare concurent, de
identificare suma punctajelor de acesta. Matricea va fi
coloana punctajelor (a doua).
1. Se un tablou bidimensional cu 11 linii m coloane ce numere naturale.
un program care suma elementelor de pe fiecare linie cu de
ordine par produsul elementelor de pe fiecare cu de ordine impar.
#include <iostream.h>
int a[100] [2];
int n,b,i,j,x,m,p;
void main() {
cinnm;
for (i=O;i<n;i++)
ari] [1]=0;
ari] [O]=i;
for (j=O;j<m;j++)
{ cinx;
a [ i] [1] +=X; }
}
for (i=0;i+1<n;i++)
for (j=i+1;j<n;j++)
if (a[i] [l]<a[j] [1])
x=a [il [1] ;
a [ i] [1] =a [ j] [1] ;
a [j] [1] =x;
x=a[i] [O];
a [ i] [O1=a [ j] [O] ;
a [j] [O] =x; }
couta[O] [0]+1' '; p=O; i=l;
while (i<n && p<3) {
if (a[i] [1] !=a[i-1] [1])
{ p++;
coutendl; }
if (p<3)couta[i] [0]+1' ';
} }
2.2.4 Probleme propuse
i++;
var
a:array[1 .. 100,l .. 2]of byte;
n,b,i,j,x,m,p:integer;
begin
readln(n,m) ;
for i:=l ta n do begin
a[i,2] :=0;
a[i,l]:=i;
for j:=l ta m do begin
read(x) ;
inc(a[i,2],x) ;
end;
end;
for i:=l ta n-1 do
for j:=i+1 ta n do
if a[i,2]<a[j,2] then begin
x:=a[i,2] ;
a[i,2] :=a[j ,2];
a [j, 2] : =x;
x: =a [i, 1] ;
a [ i , 1] : =a [j , 1] ;
a [j ,1] :=x;
end;
write(a[l,l]);
p:=l;
i:=2;
while (i<=n)and(p<=3) do begin
if (a[i,2]<>a[i-1,2]) then
begin inc(p);writeln;end;
if p<4 then write(a[i,l]);
inc(i) ;
end;
end.
9. La un concurs de patinaj ce m probe, n sportivi prin numere
de la 1 la n (n,m <100). se numerele de ordine ale sportivilor ce au cele
mai mari 3 punctaje totale. Punctajele sunt introduse de la n
ordinea numerelor de concurs. Nota a unei probe este 10.
Exemplu: Pentru n=5, m=3 punctajele: 5,2,3; 5,5,5; I O1; 789; 442 se va
Premiul 1: 4; Premiul 2 : 2; Premiul 3: 1,5.
Se va
744
959
2. Se un tablou bidimensional cu n linii fi coloane ce numere naturale.
un program care elementul maxim de pe diagonala a matricei
linia pe care acesta este situat.
3. un program care elementele unui tablou de ordin n astfel:
elementele diagonalei principale sunt egale cu O;
elementele situate sub diagonala sunt egale cu 1
elementele situate deasupra diagonalei principale sunt egale cu 2
Exemplu: Pentru n=3 se va
022
102
1 10
4. Se tablouri bidimensionale de dimensiuni identice (nxm). se
transpusa matricei Transpusa unei matrice se prin schimbarea liniilor cu
coloanele.
Exemplu: Pentru n=3, m=2 tablourile:
23 56
34 1 1
49 00
5. un pro'gram care liniei cu cele mai multe elemente pare, al
unei matrice de dimensiune flxn. mai multe linii cu maxim de
elemente pare se va una
Exemplu: Pentru n=3 matricea: se va 2.
12130
41506
78900
6. Se un tablou bidimensional cu n linii m coloane. un program care
linia cu cele mai multe elemente divizibile cu primul element situat pe ea.
Exemplu: Pentru fI=3, m=3 matricea: se va 2.
22135
31506
78900
7. un program care cel mai mare divizor comun al elementelor situate
pe fiecare a unei matrici
Exemplu: Pentru n=3 matricea: se va 1 2 15.
24135
3 16015
7630
8. un program care doar elementele pare, situate pe liniile cu
de ordine par, al unui tablou bidimensional cu fi linii m coloane.
Exemplu: Pentru n=3, m=4 matricea: se va
24132 24132
24 1 6 12 6 1 1224
167302 167302
111
se va
3 1 60 13
167302
24132
9. un program care elementele de pe prima linie a unui
tablou bidimensional numai prin de interschimbare a coloanelor.
Exemplu: Pentru n:::3, m=4 matricea: se va
24132 13422
3 1 60 13 60 1 3 13
167302 307 162
10. un program care circular liniile unui tablou bidimensional cu n linii
m coloane, cu o mai sus:
Exemplu: Pentru n:::3, m=4 matricea:
24132
3 1 60 13
167302
11. Se un tablou bidimensional cu n linii. se determine c.m.m.d.c al
valorilor ce suma elementelor de sub diagonala suma elementelor de
deasupra diagonalei principale.
Exemplu: Pentru n=3 matricea: se va 3
160
916
991
12. Se un tablou bidimensional cu n linii. se determine elementele
care sunt situate pe linii coloane de Un element va fi suma
pe linia i este cu suma pe coloanaj.
13. Se un tablou bidimensional cu n linii. se determine toate
elementele ce puncte minim pe linie maxim pe coloana pe care
este situat).
14. Se o matrice de n linii. se suma elementelor situate pe
cele diagonale celei principale.
Exemplu: Pentru n=4 matricea: se va 12 (6+6)
1 2 3 4
212 3
3 2 1 2
432 1
15. se toate elementele dintr-o matrice de n linii m coloane care au vecinii
numere pare. Elementele vecine lui a[iJ] sunt a[i-1J], a[iJ-l}, a[i+1J] a[iJ+l],

16. Se o matrice de IZ linii. se toate liniile din tablou care
ncep cu un divizibil cu 10.
17. se determine elementul cu maxim de al unui tablou bidimensional cu
IZ linii m coloane.
Exemplu: Pentru n:::3, m=4 matricea: se va 4 apare de 5 ori '
2413 2
34604
164304
112
se va
Suma(zl)=4
Suma(z2)=8
Suma(z3)=12
Suma(z4)=16
18. se determine din elementele distincte de pe marginea unui tablou
bidimensional
Exemplu: Pentru n=3 matricea: se va 12 3 4 6
243
346
143
19. Se un vector de n*m caractere. se completeze o matrice de n linii m
coloane cu codurile ASCII asociate caracterelor respective.
Exemplu: Pentru n=3, m=4 vectorul se va matricea:
'A','B','C','D','a','b','c','d','A','a','B','b' 65666768
979899100
65976698
20. un program care o matrice de ordin n ale elemente sunt
numerele de la 1 la n
2
, completate n ordine ncepnd cu prima linie.
Exemplu: Pentru n=3 se va se va matricea:
123
456
789
21. Se un tablou bidimensional cu n linii In coloane avnd
elemente ntregi. se determine de linii care au toate componentele egale.
Exemplu: pentru n=5, m=3 tabloul de mai jos, se va
763 2
444
383
666
456
22. Se un tablou bidimensional cu m linii Il coloane avnd ca
elemente cifre binare. Fiecare linie un n baza 2. Se cere se
aceste numere converti te n baza 10. Exemplu: Pentru m=5,1l=4 tabloul:
OO1 1 se va
100 1 3 9 14 5 O
1 1 1 O
O1 O1
0000
23. Se un tablou bidimensional cu n linii n coloane avnd
componete de tip ntreg. Cele diagonale ale tabloului mpart tabloul n patru regiuni n
de-triunghi. Se cere se determine suma componentelor din interiorul zone.
Exemplu: Pentru 1l=5 tabloul:
01 1 10
20103
22033
20403
04440
113
se va
1,3,6,9,5
se va
85955
68616
24. Se un tablou bidimensional cu n linii m coloane (l::;m,n::;10) avnd
componete cifre zecimale. Fiecare linie a tabloului cifrele unui natural n
baza 10. Se cere se pe rnd cifrele sumei celor n numere descrise prin
tabloul anterior, prin
Exemplu: Pentru n=4, m=4 tabloul
0914
921 1
3547
0023
25. Fie a o matrice cu n linii m coloane. un program care
elemente aij cu proprietatea sunt egale cu c.m.m.m.c dintre suma elementelor de pe linia
i produsul elementelor de pe coloanaj.
26. Se un tablou bidimensional cu n linii m coloane (l ;gn,n:;;50) avnd
componete numere ntregi. Se cere se liniile din tablou care au cele mai multe
componente egale.
Exemplu:Pentru n=4 I m=5 tabloul:
52845
85955
79722
68616
27. Se un vector cu n*m elemente de tip char. el forma
a unei matrice de dimensiune nxm. se completeze elementele
matricei, cont de presupunere.
Exemplu: pentru n=3, m=2 vectorul ('p', 'v', 'c', 'd', 'b', 'a'), pe linii a elementelor
matricei este:
pvc
dba
28. se rearanjeze elementele unei matrice de dimensiune nxm, astfel nct ele fie
ordonate att pe linii ct pe coloane.
Exemplu: n=3, m=4 matricea se va
3189 0112
4657 3345
2013 6789
29. un program care elementele unei matrice de dimensiune nxn, parcurse
n Exemplu: Pentru n=3 matricea:
O1 2 se va OI 2 3 4 5 6 7
783
654
30. un program care elementele unei matrice de dimensiune 'un,
elementelor situate pe diagonala
Exemplu: Pentru n=4 matricea: se va
0112 112
3345 345
6789 679
7895 789
114
se va
2 4096
5 512
se va
2 3
se va
4237
5432
2543
liniilor unui tablou bidimensional A(n,m) care
35. Fie un tablou bidimensional cu n linii m coloane cu elemente numere naturale mai
mici dect 10000. Un element din tablou are ca vecini, elementele situate n imediata
pe se identifice elemente din matrice care au
proprietatea produsul vecinilor lor cele mai mari valori ce se pot
Pentru fiecare element determinat se va valoarea acestuia a produsului elementelor
vecine.
Exemplu: Pentru n=4, m=4 tabloul:
0858
8285
3830
0262
33. Fie un tablou bidimensional A(n,m). un program care elementele de
pe liniile care ncep cu un prim.
Exemplu: Pentru n=3, m=4 matricea A :
4237 \
2345
3452
34. Determinatj.numerele de ordine ale
cele mai multe valori palindrom.
Exemplu: Pentru n=3, m=4 matricea A:
11 21 3343
22341452
3245352
32. Se o matrice A(n,m) ce numere ntregi. elementele
pare situate pe ultima prin de linii. .
Exemplu: Pentru n=3, m=4 matricea A : se va
1234 3452
2345 2345
3452 1234
31. un program care elementele unui tablou bidimensional A(n,m) cu
valori consecutive pe linii, ncepnd de la de ordine al liniei respective.
Exemplu: Pentru n=3 m=4 elementele tabloului A vor fi :
1234
2345
3456
36. Fie un tablou bidimensional de ordin n cu elemente naturale. Se un
traseu ce din matrice de pe linia x coloana y. de ne este de un
de p caractere N, V, E, S care de deplasare. Determinati suma elementelor
situate pe drum. Elementul de start drumului.
Exemplu: Pentru n=4, m=4, x=3, y=2, p=6, se va 30 (8 +2+9+5+1+2+3)
traseul N,N,E,S,V,V tabloul:
0958
3215
3830
0262
115
1. Care dintre variante deschiderea la citire a text 'A. TXT'
2.3.1 Teste cu alegere
a) f=fopen ("B. txt", "r") ;
b)f=fopen("B.txt", "w");
e)f=fopen{"w","B.txt") ;
d ) f=fopen ("B. txt" ,w) ;
a) f=fopen ("A. txt" , "w") ;
b) f=fopen ("r", "A. txt") ;
e) f=fopen ("A. txt", r) ;
d) f=fopen ("A. txt", "r") ;
116
a)rewrite{f);assign{f, 'B.txt')
b)assign{f, 'B.txt');rewrite(f);
e)assign{f, 'B.txt') ;rewrite{B);
d)assign{f, B.txt );rewrite{f);
a)reset{f);assign{f,'A.txt')
b)assign{f, 'A.txt');rewrite{f)
e)assign{f, 'A.txt');reset{A.txt)
d)assign{f, 'A.txt');reset{f)
2. Care dintre variante deschiderea la scriere a text
'B.TXT'
39. Fie un tablou bidimensional cu n linii m coloane, cu elemente ntregi. Din punctul de
linia x coloana y se poate tabloul mergnd numai pe sau dar
numai elementul este a[x,y] este negativ. Pe traseul urmat nu trebuie se
alt element negativ. se determine linia coloana de unde se poate matricea, astfel
nct suma elementelor ntlnite pe traseu fie linia coloana punctului
de start suma elementelor de pe drum.
Exemplu: Pentru n=4, m=6 tabloul: se va 33 8 (linia 3, coloana 3, suma 8)
50 60 90 50 60 60
40 30 -9 -3 40 70
40 -1 -8 5 2 1
80 80 80 80 90 20
38. Se o de cu n linii m coloane, pe care sunt plasate pioni. Pionii sunt
la citire prin valoarea 1. Regina trebuie ntr-un punct al tablei
astfel nct pe cele diagonale pe care le se afle mai pioni.
linia coloana pe care se va regina de pioni de pe diagonale
atacate.
Exemplu: Pentru n=5, m=4, tabloul: se va 4 2 5 (linia 4, coloana 2, 5 pioni)
1 100
O101
10 1 O
1000
10 1 O
37. Fie un tablou bidimensional de ordin n. un traseu ce din
matrice de pe linia x coloana y. de ne este de un de p
caractere N, V, E, S care de deplasare. elementele prin care
s-a trecut de cele mai multe ori. De la intrarea standard se va prelua n, x, y, p traseul
urmat. Pentru fiecare element din va linia coloana pe care este situat.
Exemplu: Pentru n=4, x=3, y=2, p=8 12 2
traseul N, N, E, S, V, S, S, V 3 2
!II text
3. Care dintre au ca efect citirea unui caracter din C.TXT.
a)
assign(f, 'C.txt'); reset(f);
close(f);
b)
assign(f, 'C.txt'); reset(f);
read(x); close(f);
c)
assign(f, 'C.txt'); reset(f);
read(f,x); close(f);
d)
assign(f, 'C.txt'); reset(f);
close(f); read(f,x);
a)
f=fopen ( "c. txt" , "r" ) ;
fclose(f) ;
b)
f=fopen( -c. txt", "r");
scanf("%c",&x); fclose(f);
c)
f=fopen ("C. txt" , "r") ;
fscanf(f,"%c",&x); fclose(f);
d)
f=fopen( "c. txt", "r");
fclose(f); fscanf(f,"%c",&x);
4. Considernd variabila f este de tip care dintre
n mod corect s-a ajuns la finalul indicat de el.
a)
if eoln(f) then
write('Final de fisier')
else write ('Nu' )
b)
if eof(f) then
write('Final de fisier')
else write( 'Nu')
c)
if eoln(f)=false then
write('Final de fisier')
else write( 'Nu')
d)
if not eof(f) then write('Nu')
else write('Final de fisier')
a)
if (eof(f))
cout "Final de fisier";
else cout "Nu";
b)
if (feof(f))
cout "Final de fisier";
else cout "Nu";
c)
if (!eof(f))
cout "Final de fisier";
else cout "Nu";
d)
if (!feof(f))
cout "Nu";
else cout "Final de fisier";
5. 'D. TXT are ce se va n urma
programului
D.TXT
13 45 23
32 42 234
56 78
32 23 43
32 32 32 32
var
f:text; x,y,z:integer;
begin
assign(f, 'D.txt');reset(F);
readln(f,x,y) ;
read(f,z);
writeln(x, , ',y,' ',z,' ');
end.
#include <stdio.h>
FILE *f; int x,y,z;
void main() {
f=fopen("D.txt", "r");
fscanf(f,"%d %d %d\n",&x,&y,&z);
fscanf(f, "%d",&z);
printf("%d %d %d \n",x,y,z);
}
117
118
7. 'F. TXT' are ce se va n urma i
programului
6. 'E. TXT' are ce se va n urma
programului
d) 13 45 32
d)2 3 4
d)l 9 3
c) 13 32 23
#include <stdio.h>
FILE *f; int x,y,z;
void main() {
f=fopen("E.txt", ar");
fscanf(f,"'d %d",&x,&y);
fscanf(f, "'d\n",&z);
printf("'d %d %d \n",x,y,z);
}
c) 1 67 567
#include <stdio.h>
FILE *f; char x,y,z;
void main() {
f=fopen("F.txt", "r");
fscanf(f,"%c",&x);
fscanf (f , "'c" ,&y);
while(getc(f) !=' \n');
fscanf(f,"'c,&z) ;
printf("'c 'C 'C \n",x,y,z);
c) 1 9 8
b)13 32 56
b)l 2 67
b) 1 2 9
a)13 45 23
E.TXT
123 4
67 34 23
567.546 677
1234 3234 4565 6564
12345 12445 12223
var
f:text; x,y,z:integer;
begin
assign(f, 'E.txt'); reset(F);
read (f, x , y) ;
readln ( f , z) ;
writeln(x, , ',y,' ',z,' ');
end.
a)l 2 3
var
F.TXT
12345 12
93 16 32
8.023 322 21
0.823 21
0.21 213.12
a)l 2 3
f:text;
x,y,z:char;
begin
assign(f, 'F.txt') ;reset(f);
read(f,x); readln(f,y);
read(f,z);
writeln(x, r ','y,' ',z,' ');
end.
8. 'G. TXT' are ce se va n urma
programului
G.TXT
IaEaws
S,a.d sdll
-dsa
Xda dsa asd
da
sda sad
9. Care va fi H.TXT n urma programului
Solutie: Se va folosi un auxiliar O.TXT pentru scrierea pe fiecare linie a primului
ultimului caracter depe linia din IN.TXT.
IN.TXT va fi iar O.TXT va fi redenumit cu numele IN.TXT.
1. text IN.TXT prelucrare: de pe fiecare linie sunt toate
caracterele cu primului ultimului. un program care
asupra IN.TXT.
d)
Ieri
13 Azi 14 Maine
15
d) IES
2.3.2 Probleme rezolvate
#include <stdio.h>
#include <string.h>
char s[256];
void main() {
FILE *fl=fopen("in.txt", "r");
FILE *f2=fopen ( "o. txt" , "w" ) ;
while (!feof(fl)) {
fscanf(fl,"%s",&s) ;
if (strlen(s)==l)
fprintf(f2,"%c\n",s[O]) ;
c)
Ieri 13
Azi 14
Maine 15
#include <stdio.h>
FILE *f; char x,y,z;
void main() {
f=fopen("H.txt", "w");
fprintf(f, "Ieri %d\n", 13);
fprintf(f, "Azi %d ", 14);
fprintf(f,"Maine %d\n" , 15);
fclose(f);
}
c) S - X
#include <stdio.h>
FILE *f; char x,y,z;
void main() {
f=fopen("G.txt","r");
!='\n');
fscanf(f,"%c",&x);
while(getc(f) !='\n');
fscanf (f, "%c" ,&y) ;
while(getc(f) !='\n');
fscanf(f, "%c\n",&z) ;
printf("%c %c %c \n",x,y,z);}
b)
Ieri 13
Azi 14 Maine 15
b)a S -
119
1 var f,g:text;
2 ch:char;
3 ok:boolean;
4 begin
5 assign(f, 'in.txt'); reset(f);
6 assign(g, 'o.txt'); rewrite(g);
7 while not(eof(f)) do begin
8 read(f,ch);
9 write(g,ch);
10 ok:=true;
a)
Ieri
13 Azi 14
Maine
15
alI S -
f:text;
x. y, z,.: char;
begin
assign(f, 'H.txt'); rewrite(f);
writeln(f, 'Ieri', 13);
write('Azi " 14);
writeln( 'Ma:ine ',15);
close(f);
end.
var
f:text;
x,y,z:char;
begin
assign(f, 'G.txt'); reset(f);
readln (f) ;
readln(f,x) ;
readln(f,y) ;
readln(f,z) ;
writeln(x,' ',y,' ',z,' ');
end.
var
2. Un text numere ntregi dispuse pe mai multe linii. Se nlocuirea n
a tuturor unui x cu un alt y, citit de la un
program care permite efectuarea acestei asupra IN.TXT.
Solutie: Se un auxiliar OUT.TXT deschis la de scrierea, n care se
vor plasa toate numerele din IN.TXT, x care va fi nlocuit cu y.
IN.TXT va fi iar OUT.TXT va fi redenumit cu numele
IN.TXT.
else {
fprintf (f2, "%c", s [O));
fprintf (f2, "%c", s [strlen(s) -1)) ;
fprintf(f2, "\n");
}
}
fclose(fl); fclose(f2);
unlink("in.txt") ;
rename("o.txt","in.txt") ;}
#include <stdio.h>
int x,y,numar; char c;
void main() {
printf("nr de cautat:");
scanf ("%d", &x) ;
printf("Inlocuiesc cu:");
scanf (" %d" ,&y) ;
FILE *fl=fopen("in.txt", "r");
FILE *f2=fopen("out.txt", "w");
while (!feof(fl)) {
fscanf(fl,"%d%c",&numar,&c);
if (x==numar)
fprintf(f2, "%d ",y);
else
fprintf(f2, "%d II ,numar);
if (c==' \n ' )
fprintf(f2, "\n");
}
fclose (fl); fclose (f2) ;
unlink("in.txt") ;
rename("out.txt" , "in.txt") ;
end;
readln(f); writeln(g);
end;
close(f); close(g);
erase(f);
rename(g, 'in.txt');
end.
var f,g:text;
x,y,nr:integer;
begin
assign(f, 'in.txt') ;reset(f);
assign(g, 'out.txt');rewrite(g);
writeln('nr de cautat');
read(x) ;
writeln('Inlocuiesc cu');
read(y) ;
while not (eof.( f)) do begin
while not eoln(f) do begin
read (f, nr) ;
if nr=x then write(g,y,' ')
else write(g,nr,' ');
11 while not(eoln(f)) do begin
12 read(f, (ch));
13 ok:=false;
14 end;
if not ok then write(g,ch);
readln(f); writeln(g);
end;
close(f); close(g);
erase(f); rename(g, 'in.txt');
end.
IN.TXT Se va 3
2
4
5
l
120
3. n text IN.TXT dispuse pe fiecare linie cte un din numerelor
primelor n (n<30000) numere naturale nenule. face un singur care a fost
omis. un program care
Exemplu:
Solutie: Suma primelor n numere naturale este n*(n+1)div 2. Se va calcula suma numerelor
din acestora. Pe baza formulei de mai sus se
Se citesc succesiv numere din la ntlnirea unui care
cu mai mult de o unitate suma numerelor anterior citite. Fie S n
valoarea S+1 nu se mai poate
suma+=curent;
} while (!feof(f));
)
}
fclose(f);
nr=(long) (nr+l)*(nr+2)/2-
(long) suma;
printf("Nr.lipsa=%d\n".nr) ;
}
#include <stdio.h>
int n,curent; long suma;
void main() {
int i;
FILE *f=fopen("in.txt", "r");
do {
fscanf(f, "%d",&curent) ;
if (curent>suma+l) {
printf ( "Nr. maxim ");
printf ("%d\n", suma) ;
return;
#include <stdio.h>
int hr,aux; long suma;
void main() {
FILE *f=fopen("in.txt", "r");
while (!feof(f)) {
fscanf(f, "%d\n",&aux) ;
suma+=(long)aux;
nr++;
121
var f:text;
ok:boolean;
suma,curent:longint;
4 begin
5 assign(f, 'in.txt'); reset(f);
6 suma:=O;
7 ok:=true;
8 while not(eof(f)) and ok do
9 begin
10 read(f.curent);
11 if curent>suma+l then
ok:=false
else suma:=suma+curent;
end;
close(f) ;
writeln( 'Nr. maxim' ,suma);
end.
var f,g:text;
aux,suma,nr:longint;
begin
assign(f, 'in.txt'); reset(f);
nr:=O;
while not(eof(f)) do begin
readln (f, aux) ;
suma:=suma+aux;
inc (nr);
10 end;
11 close(f);
12 nr:=(nr+l)*(nr+2) div 2-suma;
13 writeln('Numarul lipsa=' ,nr);
14 end.
4. n IN.TXT pe prima linie un de numere naturale. Citirea din
a unui nou este de ca din termeni
din a unui de numere consecutive ncepnd cu 1. se determine
care este maxim care se poate respectnd regula
Exemplu: Pentru
IN.TXT
1241011 32324324154321
Se va 7
Citirea se va ncheia o cu citirea valorii 10, deoarece valoarea 8 nu se poate forma ca
de termeni din
1,2,3(1+2),4,5(1+4),6(2+4),7(1+2+4)
5. se toate caracterele neimprimabiJe din text A.IN prin codul ASCII
al lor, precedat de caracterul" # ".
parcurgerea A.IN vor fi ignorate la de scriere linile cu
de ordine par caracterele situate pe impare n cadrul acestora.
#include <stdio.h>
FILE *f,*g,*h; char x;
void main() {
f=fopen (" in. txt", "r") ;
g=fopen(" out. txt" , "w'") ;
while (!feof(f)) {
do
{
fscanf(f,"%c",&x);
if (x=='\n' I Ifeof(f)) break;
fscanf(f, "%c" ,&x);
if (x=='\n' I Ifeof(f)) break;
#include <stdio.h>
FILE *f,*g,*h;
int m,i,j; char x;
void main() {
f=fopen ( "a. in" r "r" ) ;
g=fopen ("b. in", "w") ;
while (!feof(f)) {
do {
fscanf(f,"%c",&x);
if (x=='\n' I Ifeof(f)) break;
if (x<=32)
fprintf(g, "#%d", (int)x);
else fprintf(g, "%c",x);
} while(l);
fscanf(f, "\n");
fprintf(g, "\n");
}
fcIose(f); fcIose(g);
unI ink ( n a . in" ) ;
rename ( "b. in" , "a. in" ) ;
var f , g, h : text;
m,i,j:integer;
x:char;
begin
assign(f, 'a.in');
reset(f) ;
assign(g, 'b.in');
rewrite (g) ;
while not eof(f)do begin
while not eoln(f) do begin
read(f,x) ;
if ord(x)<=32 then
write(g, '#' ,ord(x))
else write(g,x);
end;
writeIn(g); readIn(f);
end;
cIose(f); cIose(g);
erase(f);
rename (g, 'a. in ' )
end.
122
var f,g,h:text; x:char;
begin
assign (f, 'a. in' ); reset (f) ;
4 assign(g, 'b.in'); rewrite(g);
5 while not eof ( f) do begin
6 while not eoln ( f) do begin
7 read(f,x);
8 if not eoln(f)then begin
9 read(f,x); write(g,x)
10 end;
end;
z ead.l n ( f) ;
6.. Fie text IN. TXT ce doar caractere alfanumerice. un program
care OUT.TXT n care se caracterele situate pe pare(al
doilea, al patrulea, din cadrul liniile cu de ordine impar.
Exemplu: IN. TXT OUT.TXT
ADFABET DAE
M23CRI 2468
123456789
Un caracter neimprimabiJ are codul ASCII mai mic sau egal cu 2. A.IN va
fi parcurs la citire simultan se va crea B.IN n care caracterele vor fi scrise
conform La final, va fi iar B.IN va fi redenumit cu numele
A.IN.
fprintf(g,"%c",x);
} while (1);
whi.le (!feof(f) && getc(f) !='\n');
fprintf (g, "\n") ;
}
fclose(f); fclose(g);
}
readln (f) ;
writeln (g) ;
end;
close(f);
close (g) ;
end.
7. un program care text Il. TXT /2. TXT au
identic.
a verifica au identic vor trebui parcurse simultan la
citire egalitatea caracter cu caracter.
Nu trebuie din vedere o linie a unui poate reprezenta prefixul liniei
celuilalt De exemplu, pe o linie se pot caracterele' eu si
mama', iar pe linia din eu si mama vin'
var f,g:text;
ok:boolean; x,y:char;
begin
assign (f, 'il. txt'); reset (f) ;
'i2.txt'); reset(g);
ok:=true;
while not eof(f) and not eof(g)
do begin
whi.le net eoln(f) and net eoln(g)
do begin
read(f,x); read(g,y);
if x<>y then ok:=false;
end;
if eoln(f)<>eoln(g) then
ok:=false;
readln(f); readln(g);
end;
if eof(f)<>eof(g) then
ok:=false;
if ok then
writeln('Continut identic')
else
writeln('Continut diferit')
end.
#include <stdio.h>
FILE *f,*g;
int ok; char x,y;
void main() {
f=fopen (" il. txt" t "r") ;
g=fopen("i2.txt","r") ;
ok=l;
while (!feof(f) && !feof(g).)
do {
fscanf(f, "%c" ,&x);
fscanf(g, "%c" ,&y);
if (x==' \n' II y== ' \n' II
feof(f) I Ifeof(g)) break;
if (x!=y) ok=O;}
while (1);
if (x!=y) ok=O;
fscanf(f, "\n") ;fscanf(g, "\n");
}
if (feof(f) !=feof(g)) ok=O;
if (ok)
printf("Continut identic\n");
else
printf("Continut diferit\n");
8. text IN.TXT pe prima linie un de caractere alfanumerice. un alt
text OUT.TXT n care se din IN.TXT dispus pe mai multe linii
n felul pe prima linie primul caracter, pe a doua linie caractere
cnd' au fost plasate toate caracterele. Ultima linie a OUT.TXT poate
avea mai caractere dect linia
Exemplu: IN.TXT OUT.TXT
MWQDWEffi M
WQ
DWE
ffi
123
La prima traversare a TEXT.TXT se va crea P.TXT n care sunt
depuse numerele asociate parole, cte unul pe fiecare linie. Ambele vor fi
nchise apoi redeschise la de citire pentru crearea lui OUT.TXT.
Scrierea n OUT.TXT se va realiza simultan cu citirea caracterelor din
IN.TXT. Pentru respectarea formatului impus la scriere, ne vom folosi de o care
liniei curente pe care se face scrierea.
#include <stdio.h>
FILE *f,*g; char x;
int ln,i,j;
void main()
f=fopen (" in. txt", "r") ;
g=fopen ( "out. txt" , "w" ) ;
ln=O;
while (!feof(f)) {
ln++; j=O;
while (j<ln && !feof(f))
fscanf(f,"%c",&x);
fprintf(g,"%c",x);
j++;
}
fprintf(g, "\n");
}
fclose(f); fclose(g);}
#include <stdio.h>
FILE *f,*g,*h;
int m,i,j; char x;
void main() {
f=fopen("text.txt", "r");
g=fopen ( "out. txt" r "w" ) ;
h=fopen("p.txt", "w"); m=O;
while (!feof(f)) {
j=l;
do {
fscanf(f,"%c",&x);
if (x=='\n' I Ifeof(f)) break;
j*=(int)x-64;
} while (1);
fprintf(h, "%d\n",j);
fscanf(f,"\n");
if (j>m) m=j;
}
fclose(f) ;fclose(h);
f=fopen ("text. txt", "r") ;
h=fopen ("p. txt" , "r") ;
f,g:text; x:char;
ln,i,j:integer;
f,g,h:text; m,i,j:integer;
x:char;
assign(f, 'in.txt');reset(f);
assign(g, 'out.txt');rewrite(g);
ln:=O;
while not eof(f)do begin
inc(ln);j:=O;
while (j<ln)and not eof(f) do
begin
read(f,x) ;write(g,x);
inc (j);
end;
writeln(g) ;
end;
close(f) ;close(g);
124
assign(f, 'text.txt');
reset(f) ;
assign(g, 'out.txt');
rewrite (g) ;
assign(h, 'p.txt');
rewrite (h) ;
m:=O;
while not eof(f)do begin
j:=l;
while not eoln(f) do begin
read(f,x) ;
j:=j*(ord(x)-64);
end;
writeln(h,j);readln(f);
if j>m then m:=j;
end;
close(f); close(h);
reset(f); reset(h);
9. n TEXT.T-XT se mai multe "parole" formate din caractere de tip
scrise fiecare pe cte o linie. i se un ca produs al
numerelor de ordine ale literelor n alfabet. De exemplu pentru cuvntul "BAC"
asociat este 2*1*3=6. se creeze OUT.TXT n care pe cte o linie se parolele
care au asociat cel mai mare.
10. Se text IN.TXT ce numere ntregi dispuse pe mai multe linii.
Numerele sunt separate n cadrul liniilor prin caracterul ",". un program care
un OUT.TXT ce pe fiecare linie suma numerelor situate pe
linie n IN.TXT.
Solutie :n problema de separatorii unor date numerice sunt de caracterul
impune folosirea la citire a unei variabile de tip char.
evident problema conversiei unei valori de tip caracter n valoare pe de
parte construirea citit cu
Conversia unui caracter numeric n valoare se poate face prin intermediul codului
ASCII.
s+=nr;
fprintf(g, "%d",s) ;
fscanf (f, "\n" ) -;
}
fclose(f);
fclose (g) ;
}
#include <stdio.h>
FILE *f,*g; char x;
int s,nr;
void main()
f=fopen("in.txt", "r");
g=fopen("out.txt" , "w");
while (!feof(f)) {
s=O;
nr=O;
do {
fscanf(f,"%c",&x);
if (x==' \n') break;
if(x!=', ')nr=nr*10+(int)x-48;
else {
s+=nr;
nr=O;
while (1);
while (!feof(f)) {
fscanf(h, "%d\n",&j) ;
if (j==m) {
do {
fscanf(f,"%c",&x);
if (x=='\n' I Ifeof(f)) break;
fprintf(g,"%c",x);
} while (1);
fprintf(g, "\n") ;}
else
while(getc(f) !='\n'&&!feof(f));
}
fclose(f);fclose(g) ;fclose(h);}
125
1 var f , g : text; x: char ;
s,nr:integer;
begin
assign(f, 'in. txt'); reset (f);
assign(g, 'out.txt') ;rewrite(g);
while not eof(f) do begin
s:=O;
nr:=O;
while not eoln(f) do begin
read(f,x) ;
if x<>',' then
nr:=nr*10+ord(x)-48
else begin
s:=s+nr;
nr:=O;
end;
end;
18 s:=s+nr;
19 writeln(g,s);
20 readln (f) ;
21 end;
22 close(f);
23 close (g) ;
24 end.
while not eof(f) do begin
readln(h,j);
if j=m then begin
while not eoln(f) do begin
read(f,x) ;
write(g,x)
end;
writeln (g) ;
end;
readln (f) ;
end;
33 close(f); close(g); close(h);
34 end.
126
2.3.3 Probleme propuse
2. Se Il. TXT 12. TXT. care dintre ele mai multe
caractere. pentru aceasta numele
Se va 1D
INTREG.TXT
FRAC.TXT
0.30 0.05 0.00 0.80 0.45 0.93
2 4
1 13 3
2
I2.TXT
I
M
V
D
Exemplu: II. TXT
13
15
16
13
10. se scrie un program care un text OUT. TXT ce va pe o
linie, codurile ASCII ale tuturor caracterelor ce se n IN. TXT.
7. IN.TXT care cuprinde pe fiecare linie caractere alfanumerice (litere
cifre). un cu numele OUT.TXT n care se liniile din IN.TXT din care
au fost eliminate cifrele.
8. un program care un text /3. TXT prin concatenarea lor a
text numite II. TXT 12. TXT.
9. Se text INPUT.TXT. se scrie un program care un
OUTPUT. TXT ce liniile cu de ordine impar din INPUT. TXT .
6. Se Il. TXT 12. TXT. Unul numere reprezentnd vrsta
unor elevi, iar liniile din numele acestora, codificate printr-o
se pe ecran numelor celor mai tineri elevi.
Exemplu: REAL.TXT
2.3 4.05
1. O 12.8 3.45
1. 93
5. Se REAL.TXT ce numere reale dispuse pe mai multe linii. se
creeze un alt FRACT. TXT n care se ale
valori din primul cu zecimale exacte dar dispuse pe o linie.
4. Se REAL.TXT ce numere reale dispuse pe mai multe linii. se
creeze un alt INTREG. TXT n care se valorile din primul rotunjite
fiecare dintre ele la cel mai apropiat ntreg dispuse n ordine.
Exemplu: REAL.TXT
2.3 4.05
1. O 12.8 3.45
1. 93
3. Se IN.TXT care 10 numere ntregi scrise fiecare pe cte o linie.
prima ultima a a prelua valorile ntr-un vector.
1. Se IN.TXT ce pe prima linie un n natural, iar pe a doua
linie n numere ntregi. pe ecran primul ultimul de pe linia a doua.
12. un program care toate literele mici din IN.TXT n majuscule.
127
2.4.1 Probleme rezolvate
I3.TXT
1 9.00
M 7.50
V 7.00
M 10.00
U 7.00
D 5.50
I2.TXT
1
M
V
M
U
D
1. de ***). se de dintr-un
de numere ntregi valoarea acestei sume.
Exemplu pentru n=8 2 -4 -3 5 -4 7 8 -2 se va
suma=16
5 -478
Vom opta pentru o rezolvare a problemei, algoritmii de complexitate
respectiv fiind n de concurs.
La fiecare pas al parcurgerii vectorului a se impun efectuate
1. verificarea semnului sumei curente (se)
1.1 se>O atunci la ea se va elementul curent
1.2 se este atunci se efectundu-se
sumei curente cu elementul ari] (se<-a[iJ) a de nceput pc cu i
(pe<-i).
2. actualizarea de este posibil, cu indicelui de
nceput ie a indicelui de sf
14. Se Il. TXT 12. TXT. Unul pe fiecare linie cte
numere reprezentnd notele la ale unor elevi, iar liniile din
numele acestora. se creeze un nou 13. TXT n care pe fiecare linie
se numele elevului codificat printr-o media la
cu zecimale. Cele valori vor fi n cadrul liniilor prin cte un
'
Exemplu: Il. TXT
10 8
7 8
5 9
10 10
6 8
5 6
11. se scrie un program care caracterul neimprimabil (cod ASCII mai mic
dect 32) cu de n IN. TXT.
13. Avem n directorul curent text IN.TXT care caracterele alfanumerice.
literele sunt separatorii numerelor. De exemplu, pe o linie apar
caracterele A23sc345ss5e, atunci ea trei numere separate prin cte un 23
345 5. un program care un text OUT.TXT n care se date
de tip longint preluate n ordine de pe liniile
!II Probleme de concurs ce date structurate
128
altfel
p1 .... 1; pe1 .... i; p2 .... O;
executa scrie ali];
.... a[1]; ie .... 1; sf .... 1; pe .... 1;
n executa
atunct se .... se + ali]
1max atunci
i ie, sf executa scrie a[i];
i .... ie, sf
p2 O; ie .... 1; sf .... 1; pe1 .... 1; max .... a[1];
rpentru i 1, n executa
r
a c a ali] * O atunci
p1 .... p1 * ali];
raaca p2 * O atunci
l. p2 .... p2 * a [i] ;
raaca (a[i]<O) and (p2=0)atunci
l. p2 .... 1; pe2 .... i + 1;
raaca pl > max atunci
l. max .... p1; ie .... pe1; sf .... i;
raaca p2 > max atunci
l. max .... p2 ; ie .... pe2; sf .... i;
max .... a[1]; se
[
p en t r u i .... 2,
P
a c a se > O
altfel
se .... a[i];
I pe i;
lJiI

se >
pe;
I I sf i;
I max se;

Problema intervine de fapt la un impar de elemente negative. Se n


parcurgerea vectorului cu o pl=l. La primul negativ, se un p2
cu I(se acel negativ). Succesiv se elementele din vector la pl p2,
eventual actualiznd o pmax reprezentnd produsul maxim. La ntlnirea unui
zero se ambele valori ale pl p2 la l se
2. de produs maxim ***) Se un de n (0<n<100) numere ntregi,
printre care cel un element pozitiv. un program care
de elemente avnd produsul elementelor maxim.
Exemplu:Pentru ,i=lO (1 2 -6 3 4 5 -2 10 -5 6), l 2 -6 3 45 -2 10 are
produsul maxime 14400.
129
Solutie: q un factor prim din descompunerea lui nL Exponentul la care apare
acest factor n descompunerea lui n! este dat de formula []
partea
n
//generarea numerelor prime < n
//determina factorilor
prim[1] 2; m 1; P 3;
cat timp p n executa
i .- 1;
[
a t timp i m executa
C
a c a p mod prim[i] O atunci i
altfel i i + 1;

a c a i n atunci
m m + 1;
l
l. prim[m] p;
p ,- p + 2;
f
Pe n t ru i 1, m executa
q prim[i] ;
r O;
I x n div q;
I r
a t timp x > O executa
r r + x;
I I x x div q;
l r > O atunci acria q, r,
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
4. (Clasament . ****). N sportivi cu numere de la 1 la N iau parte la un
maraton. Clasamentul final este codificat sub forma unui vector A de lungime N. Fiecare
element a[i] din vector are interpretare: concurentul clasat pe locul i a devansat
un de a[i] ale numere de pe tricou sunt mai mari dect al lui. n
decursul ultimului an, N sportivi, au participat la M probe de maraton de
fiecare au avut pe tricoul de concurs. Toate clasamentele finale au fost
codificate regula
de determinat fiecare factor prim al lui Il! i se va calcula exponentul
formula mai sus.
Pentru implementare vom folosi un singur tablou unidirnensional care va toate
numerele prime mai mici dect n. Notnd cu m acestor valori prime, atunci
vectorul este PRIM(M). lor algoritmul de generare.
3. (Descompunerea factorialului . ***) Se un natural n mai mic dect
10
9
. se determine descompunerea n factori primi ai factorialului (n! = l *2*3 ..*n)
Exemplu: Pentru n=5 se va
2.3
3 l
5 l
130
Pentru prima de maraton clasamentul final a fost 2, 3, 1, 4, 5, iar pentru a doua
2, 1, 4, 3, 5. Concurentul cu tricoul 1 s-a clasat pe locul 3, iar la a doua pe
locul 2. Concurentul cu tricoul 4 s-a clasat n ordine pe locul 4 apoi 3.
Solutie: n procesul de identificare a clasamentului final se ncepe cu elementul l ] care
tricoului primului clasat: I} selectndu-se acest Se
identificarea ordinii la sosire ignorndu-se numerele de tricou deja selectate. La finalul
probe, se ntr-un vector n clasament a concurent, marcndu-
se cei care nu au avut o
Ca structuri de date vom folosi trei tablouri unidimensionale :
II A(N) clasamentul pentru fiecare
" P(N) pentru fiecare concurent n cadrul ultimei probe
la proba concurentul j, nu a avut o
de proba atunci pUl <- n+1
II SEL(N) pentru fiecare n parte, un concurent a trecut sau nu linia de
sosire.
pentru k 1, m executa
i <- 1, n executa se1[i] <- False
i 1, n executa citeste ari];
pentru i 1, n executa
j <- n + 1; nr <- O;

timp (j > l)and(nr ari]) executa


j <- j - 1;
c:aca not se1[j] atunci nr <- nr + 1;
sel[j] <- True;
rdaca p[j] = O atunci p[j] <- i
Ialtfel
l.l.l. (p(;l n+ II atunci p[;] - i
ca sportivii au terminat fiecare din cele M probe de maraton, care
au evoluat din ce n ce mai bine, la fiecare locul pe care l-au
ocupat a fost strict mai mic dect la proba
n text IN.IN pe prima linie se numere N M, printr-un
Pe M linii, n ordine a momentului clasamentele
n cadrul liniilor numerele sunt prin cte un O<M<IO)
In text OUT.OUT, pe o linie, se vor scrie n ordine numerele de
pe tricou ale cu ascendente. n cadrul liniilor, numerele
vor fi prin cte un nu de va
valoarea O.
:r:N.:r:N OUT. OUT
5 2 1 4
3 2 2 1 O
3 3 110
131
Solutie: Vom considera numerele 1, 1], 111, ... , 11...1 (ultimul avnd n cifre de 1).
Putem avea
6. (Multiplu ****) Fie n un ntreg. un n baza 10 divizibil cu n
format numai din cifre de I O. (n<=1000)
+ 1
sel[i] <- False
<- x+l
nr <- nr + 1
i O atunci x <- 1
i n atunci a[x] <- 2 * i
laaltfel a[x] <- ((i-l) mod n)*2
X <- 1
entru i 1, 2*n executa
nr <- O;
at timp nr < k executa
x < 2*n atunci x
laaltfel x <- 1
a[x] = O atunci
\1"
Pentru implementare vom folosi un singur tablou unidimensional A(N-l). Elementul a[r] va
reprezenta de cifre de I din care este format un din care restul r la
la n.
Printre numere unul care este multiplu de n. acesta este

Toate numerele anterioare dau la cu n resturi nenule, 1, 2, ... , n-l.
ntruct avem n numere n-I resturi, conform principiului lui Dirichlet
numere care dau rest. astfel acestor numere este
(care este, evident, format din cifrele O 1).
5. (Cerc ***) 2*n copii au tricouri numerotate cu numere de la 1 la 2*n.
copiii n cerc astfel nct din k n k cercul cei cu numere
pare pe tricou, n ordine apoi cei cu numerele impare pe tricou, de asemenea n
ordine va ncepe de la primul copil care va fi extras din cerc.
Exemplu: pentru n=4 k=3 copiii vor fi n cerc astfel: 2 5 8 4 7 3 6 1. Extragerea
din 3 n 3, ncepnd cu primul din se va face n ordinea 2468 1 3 5 7
Numerele din nu pot fi memorate ca ntregi mare de cifre). De fapt
ne numai resturile lor la cu n. cu x restul pentru un
oarecare din format din i cifre de 1. Atunci restul ce i+1 cifre de
I se ca (x*10+1) mod n.
Solutie: Algoritmul presupune completarea elementelor unui vector din k n k
ignorndu-le pe cele deja "ocupate". Indicele curent x care va fi completat prin
incrementare toate cele 2*n revenind la valoarea 1 atingerea 2*n.
Vectorul a se cu valorile pare 2, 4.. .2*n, apoi cu cele impare 1,
3, ... 2*n-1.
Primul este reprezentat ca la de adunare. Se de
folosind algoritmul la
7. (Adunare - **) Se numere A B cu cel mult 100 de cifre. se scrie un
program care suma celor numere.
a[r] executa scrie O
nr - a[r] executa scrie 1
altfel
r:entru
r:entru
ok False
ok False
r:entru i 1, nr executa scrie 1
132
t Oi i 1; //t este cifra de transport rest
[
a t timp (i <= a[O])or(t > O) executa
t t + a[i]*bi
ali] t mod 10; .
t t div 10; //noua valoare a cifrei de transport
i i + li
alO] i - 1; //numarul de cifre al produsului
t Oi i li //t este cifra de transport = rest
[
a t timp (i <= a[O])or(i <= b[O])or(t > O) executa
t t + ali] + b[i]i //adun cifre corespunzatoare + rest
ali] t mod 10i
t t div 10; //noua valoare a cifrei de transport
i i + li
alO] i - 1; //numarul de cifre al sumei
a[l] li X li nr li ok Truei
f
ca t timp ok executa
nr nr + li
r (x*lO + 1) mod n
r
ac a r O atunci

ac a a[r] = O atunci
a[r] nri
8. - **) Se un A cu cel mult 100 de cifre B un mai mic
ca 32.768. se scrie un program care cele numere.
Se numerele n vectori [0... 100] astfel: elementul Ova indica de cifre
elementele de la 1 ncolo vor cifrele n ordine De exemplu 125
este ca (3, 5,2, 1). modalitate de reprezentare simularea
de adunare folosind algoritmul la
Solutie: Numerele sunt reprezentate ca la de adunare. Se de
folosind algoritmul la
Solutie: Primul este reprezentat ca la de adunare. Se de
folosind algoritmul la
10. - **) Se un cu cel mult 100 de cifre altul mai mic ca
32.768. se scrie un program care ctul celor numere.
O) executa
O) executa
executa
t <- Oi i <- a[O]i
[
a t timp i > O executa
t <- t*lO + a[i]i
ali] <- t div b;
t <- t mod b;
i <- i-1;
C
a t timp (a [O] > O)and(a[a[O]]
a[O] <- a[O] - 1;
C
a t timp (a[O] > O}and(a[a[O]]
a[O] <- a[O] - 1;
t <- Oi i <- li
cat timp (i <= a[O]}or(t > O)
ali] <- ali] - bei] - t;
daca ali] < O atunci t <- 1
altfel t <- Oi
ali] <- ali] + t*10;
i <- i + li
11. - ***) ne o din noduri situate n punctele de
coordonate ntregi, fiecare nod fiind unit prin bare paralele cu axele de coordonate de cele 4
noduri vecine. Un este plasat n originea sistemului de coordonate. La
fiecare se poate deplasa din nodul n care se n unul dintre cele 4
noduri vecine.
un program care determine n cte moduri se poate deplasa din
ntr-o n timpul cel mai scurt.
de intrare spider. in pe o linie abscisa ordonata punctului final,
separate prin x y (O< x , y S; 80)
n de spider. out se va pe prima linie de moduri determinat
Nr.
Exemplu:
9. - **) Se numere A B, cu cel mult 100 de cifre. se scrie un
program care A-B.
spider.out
110
(Olimpiada de Gimnaziu, 2001, cls. VII-VIII)
spider.in
2 3
133
Solutie: Se pentru fiecare (x, y) n cte moduri se poate ajunge acolo
astfel: A{x,yj = A{x-l,yj + A{x,y-1].
Solutie: Se parcurg cele cu iar unde se face o n
La se cele sunt egale.
de intrare siruri. in pe prima linie N K separate printr-un Pe
N linii vor fi cte un (1 sau -1) reprezentnd elementele primului (n
ordinea , iar pe N cel de-al doilea
siruri.out
3
1
2
3
pentru i - 1, n - k + 1 executa
[
ac a ali] b[i] atunci
rpentru j - i, i+k-l executa
L.a[j] - -e I i l ,
scrie i;
134
rpentru i O, x executa
l.a[o] [il - 1;
rpentru i-O, y executa
l.a [il [O] 1;
[
ent ru i - 1, x executa
pentru j _ 1, Y executa
. Cari] [j] - ali-il [j] + ali] [j-l];
scrie a [x] [y] ;
1
2
3
4
5
6
7
8
de siruri. out va pe prima linie M minim de iar
pe M linii de nceput de unde se ncep la
1 se n N). Se mereu
Exemplu: siruri. in
4 2
1
-1
1
-1
-1
-1
1
1
12. - **) Se dau de lungime N un K (N<lOOO,K<1000). Cele
au numai numere 1 -1 . Scopul este pe primul n al doilea.
Singura este o de K elemente le
semnul la toate numerele cuprinse n poate cel
mai devreme la primul element se cel mai trziu la ultimul.
mod 4=2 atunci
135
de intrare text. in textul dat.
11_+11;
mod 4=3 atunci
"__ -+11;
4=1 atunci
u+'" ;
rpentru div 4 executa
L.scrie "+--+";
(http://infoarena.devnet.ro)
Solutie: se pe fi pe x
2
- (x+I)2 -
(x+2)2 + (X+3)2 =4.
Astfel, avem o pentru m putem construi o pentru m + 4. se
pe construirea de semne pentru O, 1,2 sau 3(n de restul lui fila 4)
+--+ de fI/4 ori.
13. (Semne - ****) Pentru un N (O<N<IOOO) natural nenul, se o
de semne + - , un vector X=(XI,x2, ...,xk), Xi din {-I, Il astfel
nct: N = Xl *12 + x2*2
2
+ ... + Xk*k
2
, unde k este natural ce
operatorilor
semne. in pe fiecare linie valorile lui fi pentru care se doresc
ca mai sus.
semne. out va pe cte o linie de semne
de pe linie din de intrare.
Exemplu: semne. in semne. out:
2 ---+
4 +--+
8 +--++--+
5 ++--+
14.(Text - **) de rezultatele sale la ultimul concurs, Paftenie a la
programare concentrat strict asupra muncii laborioase, dar care mai
efort intelectual. De el un text de cel mult 1.000.000 de caractere,
trebuie calculeze lungimea medie a cuvintelor textului, un cuvnt fiind definit ca o
de caractere ale alfabetului englez ('a' .. 'z' , 'A' .. 'Z'). Definim
lungimea medie = (lungimea a cuvintelor textului) / de cuvinte ale
textului). un program care i problema lui Paftenie.
de text. out va pe prima linie un singur ntreg, reprezentnd partea
ntreaga a lungimii medii a cuvintelor textului.
Exemplu: text. in text. out
- Lasa-ma in pace, ca am invatat 3
azi noapte toata ziua!
136
la parcurgerii de ultimul caracter citit a fost o
mare sau mica, se actualizeze de cuvinte suma lungimilor.
cub. out
11331
cub. in
1; nr O;
at timp i*i*i n executa
j i*i*i;
c O;
[
a t timp j>O executa
c c + 1;
arc] j mod 10;
j j div 10;
ok truei
[
a c a a # -1 atunci
s s + b - a + 1;
nr nr + 1;
scrie s div nr;
a -1; b -1; s O; nr O;
r
a t timp nu s-a ajuns la executa
c;
i
a c a c este litera mica sau mare atunci
C
a c a a = -1 atunci
a O; b O;
altfel b b + 1;
I

15. (Palindrom cubic - **) Se n natural. cel mai mare cub perfect
mai mic sau egal cu n care este palindrom. text cub. in pe prima
linie n (n<2000000000). text cub. out va o linie pe care se
cerut de
Solutie: Se la puterea a treia orice ncepnd cu 1 la V;;. eubul
este verificat este un palindrom.
Exemplu:
1340
Solutie: Se parcurge caracter cu caracter (nu este stocarea datelor de
intrare ntr-un vector) se variabile care de nceput a
ultimului cuvnt detectat n prezent, s-a vreunul. De asemenea se
variabile pentru suma lungimilor cuvintelor de cuvinte pentru a calcula
rezultatul.
137
1. (Ultima cifra - **) Se un natural N mai mic dect 10
5
. se determine
ultima a factorialului (N! = 1*2*3..*N)
Exemplu: Pentru N=5 se va 2.
2.4.2 Probleme Propuse
i*i*i) atunci nr _ i*i*i;
executa
atunci ok _ false;
l
rpent ru j - 1, c div 2
4idaca a[j] # a[c-j+1]
daca (ok=true)and(nr <
scrie nr;
4. (Piese de joc - ***) Se o de forma Toate piesei sunt
colorate cu o culoare k. Se o de joc din n x m
(n,m:5100), fiecare fiind cu o culoare. Culorile sunt codificate cu numere
de la lla 100.
o astfel de se poate pe toate din pe care le
au culoare k nici o din jurul ei nu are culoarea k (n urma
piesei pe O se "n jurul" piesei ea are cel o cu
aceasta.
Pentru n, m, k o a tablei date, se determine maxim de piese ce se
pot pe piese. in pe prima linie numerele n, m k, iar pe
n linii cte m numere reprezentnd codificarea tablei. piese. out va
maxim determinat.
2. (Cifre - *) Se un de Il (11<100) numere ntregi de cel mult 9 cifre. se
verifice '
Fiecare din are cel o care apare n anterior.
Fiecare din se din anterior prin sau eliminarea
unei cifre.
Toate numerele cifre. (Cifrele pot de mai multe ori ntr-un
n orice ordine.). Pentru fiecare dintre cele 3 se va pe ecran pe cte o linie unul
din cuvintele DA respectiv NU reprezentnd corect la
Exemplu: n=7 n=4
173 17 7 72 472 4572 572 177 17 117 1117
a. DA b. DA c . NU a. DA b. DA c. DA
3. (Exponent - **) Se un natural Il (n<=IOOO) un natural p. Se
cere se exponentul maxim E astfel nct produsul 1*2* ... n fie divizibil cu
pE.
Exemplu: Pentru: n=7 p=6 se va 2. (1*2*3*...*7=5040 5040 este divizibil cu 6,
cu 6
2=36,
dar nu este divizibil cu 6
3=216)
138
7. (Aisberg. ***) Descriem un aisberg cu ajutorul unei matrici. Punctele marcate cu gri
aisbergului. asupra lui un vnt cald, el ncepe
se de pe margini spre interior. Regula topirii este ntr-un interval de
timp se acea de care are cel n aer (notate cu
1). Astfel se produc alte astfel de cmpuri de aer (notate cu 2), care se vor topi n al doilea
interval de timp
un program care pentru un aisberg dat, n cte intervale de timp se
ntreg aisbergul, respectiv pentru fiecare interval cte cmpuri de mai are aisbergul.
5. tIntervale ***) Se un de N intervale de forma [Ai,Bi}, cu Ai, Bi numere
ntregi. Un interval poate fi eliminat din celor N un alt interval care l
include strict pe acesta. maxim de intervale care pot fi eliminate.
n text interval. in se pe prima linie N (N<16000), iar pe
N linii perechi de numere naturale, mai mici dect 2000000000 ce
capetele intervale lor. Rezultatul va fi pe ecran.
Exemplu: interval. in Se va
5 3
O 10
2 9
3 8
1 15
6 11
piese. out
parola. out
(Sinaia Paco -1997 clasa a VIII-a)
6 7
acceptat
3
6. (Coduri ascunse ***) Pentru a deschide un seif trebuie introduse parole. Ele sunt
cuvinte formate din literele mari ale alfabetului englez. Seiful nu se deschide doar pentru o
pereche de parole ci pentru oricare pereche care reguli:
numai caracterele permise.
Fiecare are un asociat astfel: fiecare este printr-un
A este l , B este 2 mai departe Ia Z=26 Produsul numerelor asociate
litere din asociat parolei. Exemplu
'BAC'=2*1 *3=6. Pentru ca o pereche de parole fie trebuie ca numerele pe
care le fiecare fie prime ntre ele.
un program care cuvinte parole corecte.
parola. in va pe cte o linie cele cuvinte, iar parola. out pe prima linie
numerele asociate celor parole separate printr-un iar pe a doua linie mesajul
'acceptat' sau 'neacceptat'
Exemplu: parola. in
ABAC
DA
Exemplu: piese. in
752
2 2 545
21242
2 3 222
3 2 111
3 2 122
2 2 112
3 4 112
text 'aisberg. in' pe prima linie 2 numere ntregi, separate printr-un
reprezentnd de linii (1<=N<=40) coloane (l =<M<=40). Pe fiecare din
cele N linii, sunt M cifre egale cu O este aer sau cu 1 este pe acea
Pe margini este sigur aer.
'aisberg. out I pe prima linie de de timp n care se va
topi (7).
T..linii vor pe fiecare linie i de de existente la
nceputul intervalului de timp i.
Exemplu: aisberg. in aisberg. ou t
6 7 4
O O O O O O O 16
O 1 1 1 1 1 12
0011100 8
0011100 2
O 1 1 1 1 1 O
O O O O O O O
8. (Valoare - ****) Fie a{1], a{2], a{3], "', arni b{l], b[2], b{3], ...,
b[m], nc-n. se maximizeze valoarea expresiei E=a{l]x[l]+a{2]x{2]+...
unde sunt elemente ale b.
Datele de intrare se vor citi din valmax. in n formatul pe prima linie
numerele Il m, iar pe linii elementele celor Rezultatul va fi
pe ecran.
Exemplu: Pentru n=6, m=8 a=(3, 7, -10, 5, -1, 2) respectiv b=(IO, 5, 20, -20, -2,
7,9, -10), valoarea a lui E este 441
9. ***)O este n n*m parcele, cte m pe o linie.
n fiecare un plin cu Gigel alege un dar el vrea
ca acesta ct mai multe De aceea el va lua toate din brazii
n parcelele nvecinate la N,S,V,E de parcela n care el se le va pune n bradul
ales
Exemplu: Gigel va alege de la parcela de pe linia 3 coloana 3,.atunci
bradul din acea parcela va avea 40 de iar cei patru vor
nici unul.
139
140
=
don.ino.out
5
1 2
domino. in
4
23454 5 3 4
11. (Rma - ****) O se ntr-o intrnd de sub
Ea spre centrul zonei, plecnd de la din (1,1) mergnd cu cele
patru laturi printr-un loc de ori), descriind astfel o In figura
ordinea la deplasare n unei zone de 4 linii 4
coloane.
glob. in glob. out
4 4 3 88
2 1 6 17 1 4
3 4 8 6 3 3
1 8 8 8 4 1
14 4 8 2
Gigel are pe un de n piese de domino. El va extrage o din o n
o la finalul de piese. El astfel ca nou creat
va o de piese de lungime
care trebuie la finalul pentru a astfel un cu o
de lungime
Din text domino. in se de pe prima linie n de piese din Pe a
doua linie sunt scrise 2*n cifre ce se nscrise pe piesele de domino, n ordine de la
stnga la dreapta. (n<=10000)
n text domino. out; se va scrie pe prima linie numere, renrezentnd
de ordine al piesei din care este la finalul lungimea a
valide determinate. nu este dar se va una
Exemplu:
10. tDomino ****) O de domino are n
egale(stnga-dreapta), pe fiecare dintre acestea fiind o intre O 6. piese
o cifrele care au devenit vecine sunt fie egale fie
complementare(au suma cu 6);
Exemplu de valide de lungime 2 (formate prin a piese).
Gigel mai are k-l vor dori ca brazii lor fie cu ct mai multe
globuri.
un program care identifice care fie de cei k copii astfel nct
total de din de ei fie maxim. text glob. in va
pe prima linie numerele n, m k prin cte un
Pe linii se cte fii numere naturale mai mici dect 50000 reprezentnd
din pe fiecare linie n parte. (n,fII,k<= 100). Rezultatele vor fi
scrise n glob. out. Pe prima linie total de din de
copii, iar pe linii, linia coloana ales.
Exemplu:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Deplasarea se face naintnd alternativ fie la fie pe sub La
ntlnirea unei gropi de pe traseu, rma va intra n deplasarea se la acel
moment la sau va la prin acea naintarea se pe
sub Pe gropile sunt codificate cu valoarea 0, restul valorilor fiind codificate
cu 1. La coordonata (1,1) nu se poate afla o un program prin care sunt
identificate gropile pe care rma le-a folosit pentru a la Acestea vor fi
enumerate n ordinea ntlnirii lor pe taseu.
n rama. in se pe prima linie Il reprezentnd de linii
coloane al zonei n care se rma.
Pe n linii este harta zonei prin n cifre binare {O ,1}, fiecare
prin cte un
n rama. out se pe prima linie de gropi identificate, iar pe
p linii cte o pereche de numere printr-un reprezentnd coordonatele
gropi lor, n ordinea ntlnirii lor pe traseu.
Exemplu:
rama. in rama. out rama. in rama. out
4 2 4 3
1 1 O 1 3 4 1 1 1 O 2 4
1 1 1 1 4 1 1 O 1 O 4 2
1 1 1 O 1 1 O 1 2 2
O O 1 1 O O O 1
12. (Jocul Domino -****) n acest joc se folosesc piese dreptunghiulare de
dimensiuni. unei piese este printr-o linie n marcate printr-un
de puncte (0..6). Se un de Il. piese de domino. El se bine
aranjat pentru orice piese consecutiv, lor sunt marcate
fie cu de puncte fie suma acestora este cu 6. Exemplu de de domino
bine aranjat (0,2),(2,5)(1,3)
Trebuie un program care se poate un bine ordonat de
piese de domino, avnd voie piesele, dar nu le locul n cadrul
fie bine ordonat, fie mesajul 'Imposibil'. n de intrare domino. in se
un par de cifre mai mici sau egale cu cte valori reprezentnd
marcajele de pe o
Exemplu:
domino. in
2;3 4 5 6 5 O 3
I
domino. out
32455 6 O 3
141
arici. in arici.out
3 3 7
O 4 1
O 1 1
1 O 1
142
15. (Ariciul - ****) Planul unei livezi de cu dimensiunile IlXIII este
format din zone cu latura 1 (vezi desenul). n fiecare un pom. Din fiecare
pom n zona pot jos cteva mere. n zona stnga-sus se un anei.
Ariciul n zona dreapta-jos. n de deplasare: ariciul
se poate din zona n zona din dreapta sau de jos. un program
care maxim de mere pe care le poate strnge ariciul deplasndu-se n
zona
13. (Etalon ****) Se o de N etaloane de cunoscute folosite
pentru cu ajutorul unui taler. un program care total de
care pot fi folosind etaloanele date.
etalon. in va pe prima linie N(N<=200), iar pe a doua linie cele
N ale etaloanelor date(valori<=IOOOOO). Rezultatul se va pe prima linie n
etalon. out.
Exemplu:
etalon. out
3
Deoarece se pot 1,5 6.
etalon. in
1 2 3 4 5
1

2
3
4
Planullivezii este redat prin tabloul A cu n linii m coloane(2<n,m<lOO). Elementul A[i,)]
al acestui tablou de mere din pom n zona cu coordonatele (i,}).
text arici. in pe prima linie numerele n, m separate prin Pe fiecare
din n linii cte m numere separate prin Nici o valoare de pe linie
nu 1000. text arici. out o linie pe care se scrie
maxim de mere. strnse de arici.
Exemplu:
Ariciul
14. (Numere super-prime ****) Se de numere prime Pl> P
2
, .. P
o
, ....
Un este super prim este prim lui de ordine n numerelor
prime este un prim. De exemplu 3 este super pe a 2-a), dar 7 nu
a 4-a).
un program care descompune un dat ca de numere super prime.
mai multe se va cea cu minim de termeni. N nu va
10000 se va citi din super. in.
super. out va pe o linie termenii sumei prin cte un

Exemplu: Pentru N=6 super. out va 3 3.
2
5 1
16. tParanteze ***) Se considera de 2*n (n<501) paranteze rotunde nchise sau
deschise. Un de paranteze se valid n orice parantezelor
deschise la acea este mai mare sau egal cu parantezelor nchise
la acea se determine cte de paranteze valide
de intrare p. in n.
de p. out trebuie o linie pe care se va afla un singur
care cte de paranteze valide de lungime 2*n
Exemplu:
3
p.in
15
p.out
17. *) Se un de n<IOOOl numere naturale. se realizeze un
grafic pe n ordine a de a valorilor din
Exemplu: Pentru n=12 valorile: 3,4, 12,5,4,2,5,3,3,3, 12,5 se va
3
*
5 4 12 2
* *
*
*
*
*
*
*
*
* *
18. crescstor ***) Se un de N numere naturale. Se cere se
determine cel mai lung strict al cu proprietatea toate elementele
sale sunt numere prime.
Pe prima linie a subsir. in se N (1<=N<=2000). Pe linie se
elementele valori ntregi din intervalul [2, 30000].
n subsir. out se va pe prima linie lungimea cerut. Pe
linie se vor scrie elementele prin cte un
Exemplu:
subsir. in
10
2 5 3 7 7 9 11 8 6 13
5
2 3 7 11 13
subprim.out
19. ****) Fie o matrice A, de dimensiuni N*M, ale elemente pot fi Osau 1.
Numim o de elemente A[i,j] ce un subtablou laturile egale. Sa se
determine aria a unui din matricea A.
Valorile N M (1<=N; M<=200) se vor citi de pe prima linie a patrat. in. Pe
fiecare din N linii se afla cate M valori din {0,1}, neseparate prin
reprezentnd elementele matricei A.
n patrat . out se va valoarea ariei maxima!.
Exemplu:
8 8
01011101
10111101
00111010
11111111
10111010
11110111
01011111
11111111
patrat. in
9
143
patrat. out
144
23. (Puncte . ***) De ziua lui, Gigel a primit un poligon convex cu N<65536 vrfuri.
nu ce cu el, s-a apucat linii ntre oricare vrfuri
neadiacente. ce a tras toate liniile posibile a observat oricare trei linii nu se
n punct. Fiind o el ar vrea cte puncte de
n interiorul poligonului.
Din puncte. in se N, iar n puncte. out se scrie
rezultatul.
22. (Suma ***) Vom considera un cu N elemente o valoare M. se
determine cte perechi de elemente distincte cu proprietatea suma lor este M. Pe
prima linie a suma. in se afla N M (1<=N<=lO.OOO; 1<=M<=1.000.000.000).
Pe linie se elementele valori ntregi din intervalul [l ,
1.000.000.000]. n suma. out se va de perechi care
din
Exemplu:
swna.out
trei.out
romb. out
3
3
2
romb. in
swna.in
8 10
7 2 3 5 4 618
trei.in
21. in trei - ***) Fie un cu N elemente naturale. Acesta trebuie
n trei de elemente consecutive. Fiecare va fi de suma
elementelor sale. se astfel nct dintre suma suma
fie ct mai
De pe prima linie a trei. in se va citi N (l0:SN:S32000). Pe linie se
vor citi elementele numere naturale din intervalul [1..30000].
In trei. out se va dintre suma suma
Exemplu:
10
4 7 122 3 9 344
8 8
01011101
10111101
00111010
11111111
10111010
11110111
01011111
11111111
20. (Romb ****) Fie o matrice A, de dimensiuni N*M, ale elemente pot fi Osau].
Numim romb o de elemente A[i,)] ce un subtablou cu
A[i,JJ=l si li-XI+li-YI<=R, unde (X, Y) centrul rombului iar R raza lui. se
determine raza a unui romb din matricea A.
Valorile N M (1<=N; M<=200) se vor citi de pe prima linie a romb. in. Pe
fiecare din N linii se afla eate M valori din {O, I}, neseparate prin
reprezentnd elementele matricei A.
n romb. out se va valoarea R rombului maxima!.
Exemplu:
25. - *****) Gigel are o de N<=200.000 numere ntregi din intervalul
[-10.000,10.000] vrea sa un de cu proprietatea oricare
elemente are nu sunt aflate pe consecutive n
n secv . in se va N apoi N numere ntregi, iar n secv. out
suma cerut.
Exemplu:
26. (Tester - *****) Ion Vlad s-au gndit M (M<l ntr-un vector
V de N<19 elemente. O interschimbare n alegerea a i j (O < i, j <
N+ 1) schimbarea valorilor V[i] V[jJ ntre ele doar V[ il > V[jJ. Pe baza setului de
se vectorul V, indiferent de valorile care le

Pe prima linie din tester. in se numerele M N. Pe M linii se
perechi de numere i j. Pe prima linie din tester. out se va scrie "DA"
cele M orice vector, "NU" n caz contrar.
Exemplu:
(http://infoarena.devnet. ro)
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
secv.out
days.out
tester.out
puncte. out
DA
16
145
days.in
tester.in
puncte. in
6 4
1 2
2 3
3 4
1 2
2 3
1 2
secv.in
7
3 7 5 -1 6 6 2
5
5 365 4
Exemplu:
24. (Zile de - *****) ntr-o se N<51 persoane. Fiecare este
ntr-una din cele Z<366 zile ale unui an.
zilele de ale persoane, astfel nct n existe K perechi
de persoane n zi.
n days . in se numerele ntregi N,Z K, separate prin cte un
n days . out o linie, care N valori ntregi, cuprinse intre 1
Z, reprezentnd zilele de ale celor N persoane, astfel nct n sa existe K
perechi de persoane n zi. mai multe oricare
dintre ele. nu nici o atunci in numai valoarea O.
Exemplu:
27. (Timbre ****) Fiind date un set de n valori distincte de timbre limita k a
de timbre care pot fi lipite pe un plic, cea mai mare de
valori consecutive de la lla M care se poate
Datele de intrare se citesc din timbre. in ce
- pe prima linie din se afla k (k<=200), total de timbre ce pot fi folosite n
de valori ale timbrelor, n<=50; aceste valori sunt mai mici dect 10000
- pe linie se cele n valori ale timbrelor separate prin cte un
Datele de se vor scrie n timbre. out care va un singur
reprezentnd M (maxim) de valori consecutive care se pot forma cu maxim k
timbre de valori date.
Exemplu:
29. (Cifra. ****) Gigel, fiind plictisit, se juca n timpul orei de desennd pe o
foaie. Din profesorul l-a i-a spus i pune nota 4 nu
problema: pentru o valoare N trebuie determine ultima a sumei
II + 2
2
+ ... + tt'.
un program care ajute pe Gigel determine ultima a acestei sume
pentru T valori date ale lui N.
Pe prima linie din ci fra. in se va afla T::; 30.000. Pe T linii
se vor valori ale lui N < 10
100
pentru care trebuie
Pe cele T linii ale cifra. out se vor pentru valorile lui N date n
de intrare.
Exemplu:
28. ******) Gigel, ntr-o zi cnd temele la s-a apucat
scrie pe o foaie de hrtie, un de ireductibile de forma P/
Q
cu 1 ::; P,Q ::; N, unde
N<l.OOO.OOI este un natural ales de el. De exemplu, pentru N =4 el a

II] 1/
2
1/
3
1/
4
2/
1
2/
3
3/
1
3/
2
3
/ 4
4/
1
4/
3
Gigel s-a apucat apoi numere cte frac a pentru N =4 a sunt Il.
Fiind dat un natural N, se determine cte sunt n de construit
regulile de mai sus.
de intrare fractii. in pe prima linie natural N.
de fractii. out trebuie un natural pe prima linie care
cte sunt n
Exemplu:
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
cifra. out
timbre. out
fractii.out
1
5
2
8
3
13
146
cifra. in
timbre. in
fractii.in
5
1
2
3
4
5
3
5 2
1 3
147
30. *****) O permutare de lungime N<201 este un de elemente distincte
din {1,2,3 '" N}. Spunem o permutare are K maxime fix K
distincte n permutare, pentru care elementul curent este mai mare dect toate elementele
din stnga lui. un program care cte de lungime N cu K maxime

Pe prima linie a perm. in se vor numerele N K, separate prin cte un
iar pe prima linie a perm. out se va de de lungime N cu K
maxime.
Exemplu:
31. ******) Gigel are un de 500.000 numere ntregi din intervalul
[-30.000, 30.000]. lumea o este un de numere care apar pe
consecutive n Gigel a definit baza unei ca fiind minimul
valorilor elementelor din
Fiind dat un natural K, pentru Gigel o de lungime cel K
cu baza
de intrare secventa. in pe prima linie numerele N K, separate prin
Pe cea de.. a doua linie se elementele separate prin cte un
de secventa. out trebuie o singura linie cu trei numere:
de nceput de a de lungime cel K cu baza valoarea
a bazei.
Exemplu:
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
perm.out
secventa. out
684
perm.in
secventa. in
8 3
-1 2 3 1 O 4 8 6
32. (Ioc *****) Gicu Nicu, olimpici la buni prieteni, mereu
mbine lor cu informatica. Spre exemplu, cnd se plictisesc n ore ei un
joc, bazat pe reguli:
fie o matrice cu numere ntregi cuprinse in intervalul [-1.000, 1.000], cu N linii M
coloane (N, M s 1.000)
liniile sunt numerotate de Ia 1 Ia N, iar coloanele de Ia 1 la M
fiecare alternativ un jeton plasat pe un element din matrice
o mutare n plasarea jetonului pe o valorii din matrice
de pe Ia scorul care a mutarea; plasat jetonul
pe o poate mute jetonul doar pe o din
dreptunghiul format de stnga-sus a matricei
jocul se cnd un ajunge cu jetonul in stnga-sus al matricei
la nceputul jocului, ambii au scor O, iar care ncepe alege
ajetonului
Presupunnd fiecare din cei doi optim (prin joc optim se Gicu va
ncerca maximizeze de scor, in timp ce Nicu va ncerca sa o minimizeze),
Gicu va ncepe jocul, a jetonului, astfel nct de scor
ntre Gicu Nicu fie
5 3
(hup://infoarena.devnet.ro)
148
Prima linie a JOC. in numere ntregi N M, separate prin cte un
care de linii coloane ale matricii. N linii
cte M numere ntregi, separate prin cte un care descriu matricea.
(hup://infoarena.devnet.ro)
joc. out
316
I
lata. out
112 333
joc.in
loto.in
3 13
123
34. 2 - ***) Gigel s-a decis olimpic la poate va
rezolve singur problemele, nu va mai cere ajutorul vostru! La ora de
profesoara lui i-a dat rezolve problema de "Gigele, eu dau un
N'S. 50.000 numere ntregi din intervalul [-25.000, 25.000], iar tu trebuie o
un de numere care apar pe consecutive in cu
suma elementelor vreo 30 de minute, Gigel s-a ridicat mndru a zis:
"Am algoritmul de complexitate doamna Ca pentru
Gigel are de rezolvat aproape trebuie de
de lungime cel K.
Gigel nu destul de ca rezolva dar
poate l voi!
un program care problema din tema lui Gigel.
de intrare secv2 . in pe prima linie numerele N K, separate prin
Pe cea de a doua linie se elementele separate prin cte un
de secv2 . out trebuie o linie cu trei numere: de
nceput de a de de lungime cel K suma
33. (Loto - ****) Gigel este un mare pasionat al jocurilor de noroc, iar cel mai mult i place
sa joace la loto ,,6 din N'. La acest joc, el poate scrie pe un bilet 6 numere, din N'S. 100
numere naturale distincte date de Loteria un poate fi folosit pe un bilet de
mai multe ori.
Gigel a visat ntr-o noapte suma numerelor scrise pe biletul va fi S'S.
600.000.000, a doua zi s-a dus el un bilet
un program care i spune lui Gigel ce numere trebuie ca un bilet
(cu suma S).
Pe prima linie din in se vor numerele naturale N S, separate prin cte
un Pe a doua linie vor fi N numere naturale distincte, date de Loteria
n loto. out se vor 6 valori reprezentnd numerele alese pentru biletul lui
Gigel. nu se poate un bilet in de se va afla doar

Exemplu:
1 6
2 1 3 4 O 5
joc. out va trei numere ntregi separate prin cte un
de scor ntre Gicu Nicu linia coloana unde se va plasa jetonul la nceputul
jocului.
Exemplu:
149
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
secv2.out
zanarel.out
3
1 3 2 4 3 1
1 4 2 133
secv2.in
36. (Trapez ****) este un tip care se repede la ntr-o zi cu
soare, cnd n-avea chef asculte ce preda profesorul de s-a apucat deseneze
puncte pe o foaie de El a desenat N :s 1.000 astfel de puncte apoi pus
ntrebare: cte trapeze se pot forma cu vrfurile n aceste puncte? (doar era la
ora de mateI). Un trapez este un patrulater convex cu cel doua laturi paralele.
Exemplu:
35. (Zll/ziirel *****) este un mare pasionat al culorilor, astfel nct a luat o foaie
de mate cu N linii N coloane (6 :s N:S 1000) a desenat M (2*N:S M :s 100000) buline
sau albastre, n foii de rnate, n diferite
ce a desenat punctele a observat cel un punct pe fiecare linie
cel un punct albastru pe fiecare astfel pus
poate poligoane (nu convexe) care sa de
vrfuri, unul din poligoane sa n vrfuri doar buline iar doar buline
albastre, iar centrul de greutate al celor poligoane fie
nu este deci n-are nimic mpotriva cele poligoane se
sau sunt unul n interiorul celuilalt! Trebuie fie respectate doar
mai sus Reamintim centrul de greutate al unui
poligon cu vrfurile (xLyl) (xn.yn) ca fiind punctul xl+...+xn)/n, (yl+... yn)/n).
un program care, pentru o foaie de ca mai sus de
cele poligoane.
Pe prima linie din zaharel . in se numerele naturale N M. M
linii sunt de fofma i j c unde i j sunt numere naturale reprezentnd linia, respectiv
coloana unei buline, iar c este un caracter reprezentnd culoarea (R pentru A pentru
albastru)
Pe prima linie se va un reprezentnd cte vrfuri are fiecare poligon. Pe
linie se vor punctele care descriu poligonul cu vrfurile n buline
ntr-o ordine oarecare. Pe a treia linie se vor punctele care descriu poligonul cu
vrfurile n buline albastre, ntr-o ordine oarecare. nu se va -1 n
de
Exemplu: zanarel. in
6 12
1 3 R
2 4 R
3 1 R
4 6 R
5 2 R
6 4 R
2 1 A
4 2 A
3 3 A
1 4 A
6 5 A
6 6 A
8 3
O -6 2 1 4 -1 3 -5
38. (Numere prime- **) Gheorghe a la despre numere prime. A un
este prim, se divide doar cu I cu el nu este considerat prim).
A aflat algoritmi foarte care pot determina un este prim sau
nu, n timp chiar sub polinomial.
Din algoritmi sunt foarte Gheorghe s-a gndit la o aproximare.
Ideea lui este consideri un prim nu se divide la primele K numere prime.
ideea lui Gheorghe este doar o aproximare. Dndu-se un K
100.000, afla cel mai mic N care nu este divizibil cu primele K numele prime, dar nu
este prim.
Pe prima linie din prim. in se va afla K.
Pe prima linie a prim. out se va N
150
pe determine cte trapeze poate forma cu cele N puncte de pe foaia de
oricare trei puncte sunt necoliniare.
Pe prima linie din de intrare trapez. in se natural N. Pe
N linii se perechi de numerele naturale reprezentnd coordonatele
punctelor, numere ntregi din intervalul [0,2.000.000.000].
Pe prima linie din de trapez. out se va de trapeze care se pot
forma.
Exemplu:
(http://infoarena.devnet.ro)
(http://infoarena.devnet.ro)
subsir. out
trapez. out
1
1
subsir. in
trapez. in
banana
oana
37. *******) s-o pe prietena lui Eugenia
a programare anume a nceput cu problema celui mai lung
comun: dndu-se de lungime maxim 500, formate doar din litere mici,
se determine cel mai lung comun al celor Un al unui este
format din caractere (nu consecutive) ale respectiv, n ordinea in care
acestea apar n
Eugenia a rezolvarea problemei dar i-a pus ntrebare lui cte
comune de lungime distincte pentru cele
sunt distincte cel un caracter n unul din ele care de
caracterul din celalalt de pe
pe restul de comune de
lungime distincte pentru date, la 666013.
Pe prima linie a de intrare subsir. in se primul iar pe a doua linie
cel de-al doilea Pe prima linie a de subsir. out se va
cerut.
Exemplu:
5
O O
O 1
1 4
2 O
3 1
Exemplu:
3
prim. in prim. but
(http://infoarena.devnet.ro)
39. (Baze ***) numere care au proprietatea se scriu, n baze diferite, prin
trei cifre identice. De exemplu, 273(10) n baza 9 se scrie 333(9) n baza 16 se
scrie 111(16)' .
un program care determine toate numerele mai mici ca N<32001 care au
proprietate.
de intrare baze. in va pe prima linie N.
n de baze. out se vor scrie numerele determinate, fiecare pe cte un rnd.
Pentru fiecare se vor scrie, separate prin cte un n baza 10 cele 2
baze n care respectiv are proprietatea din
Exemplu:
300
baze. in
I
baze. out
273 9 16
(Concurs "Grigore Moisil", Lugoj 2001, c1s. VII-VIII)
sp.out sp.in
22
anaareuncojocasafrumos
40. - ***) un de caractere, care pot fi doar litere
mici ale alfabetului englez. Numim o succesiune de litere din
care are proprietatea (fie o parcurgem de la stnga la dreapta, fie o
parcurgemde la dreapta la stnga, este
De exemplu, succesiunea de litere cojoc are proprietatea
un program care determine cea mai dintr-un dat.
de intrare se sp . in linii:
N - de litere din de intrare 20001)
S/S2,,,SN - de N litere mici
de sp. out
poz - de nceput a celei mai lungi palindromice
19 - lungimea celei mai lungi palindromice
Exemplu:
(Concurs "Grigore Moisil", Lugoj 2001, c1s. VII-VIII)
41. ****) Se un de N<15001 numere ntregi (ntre -30000 30000). O
a acestui este din M elemente(numere) consecutive(O<M<=N). se
scrie a a elementelor este n modul.
Din dif. in se de pe prima linie N, iar pe N linii se
elementele mare (n ordine).
n dif. out se va scrie un singur reprezentnd suma(n modul)
Exemplu:
dir. in dir.out
3
2
-3
4
1
151
RNVNAN
152
se va scrie n pitici. out pe o linie, fiind format dintr-o
de n caractere R sau N, R reprezentnd culoarea N culoarea negru.
Exemplu:
bile. out
pitici.out
4
132
bile.in
pitici.in
Exemplu:
3
3 O 1
122
O 5 O
de intrare bile. in are
N - nr. de cutii; 3<=N<=1000;
RI VI Al - cte bile verzi albastre are n prima cutie
R2 V2 A2 - ... tot pentru celelalte cutii
43. (Bile - **) Gigel are N cutii cu bile verzi albastre. ntr-o zi, el se sa
toate bilele n trei cutii: cele ntr-una, cele verzi n alta cele albastre n alta,
de primele doua. n acest scop, el mute ct mai bile din cutiile n
care sunt n cele n care vor ajunge.
de bile. out are
NR - de bile mutate
CR CV CA - numerele cutiilor n care ajung bilele verzi, respectiv albastre.
44. (Dominante - ***) Se N puncte n plan (N:SIOOOO), cu coordonate ntregi
(ntre -30000 30000). Dintre acestea unele sunt dominante; iar altele nu. Un punct se
dominant la dreapta lui (cu coordonata X cel cu a lui) nu
nici un punct mai nalt dect el (cu coordonata Y mai mare, strict mai mare).
este cte din cele N puncte sunt dominante.
dom. in pe prima linie de puncte. Pe N linii se
coordonatele X respectiv Yale punctelor, separate printr-un
5
3 2
4 1
2 2
5 3
1 O
42. (Pitici - ***) Se n pitici, care stau n rnd, fiecare cu spre spatele
celuilalt. Piticii au pe cap negre. Piticii cu spun ntotdeauna
n timp ce piticii cu negre mint ntotdeauna. Fiecare pitic este ntrebat
cte vede n sa. n de piticilor, trebuie ce
culoare are lor.
Din pitici. in se citesc piticilor. Formatul este: pe prima linie
se de pitici n (n<20000). Pe linii se perechi de cte
numere care pitic - la ntrebare (separate prin
n dom. out trebuie scrise cte din acestea sunt dominante.
Exemplu:
45. (Semn - ***) Se un de N(O<N<lOl) numere pozitive(mai mici de 100). Se cere
se o parte din aceste numere cu -1, nct adunate (toate numerele) dea
un ct mai apropiat de 0, pozitiv (poate fie 0, aceasta fiind cea mai
e posibil).
Din semn. in de pe prima linie N, iar de pe N linii cele N numere.
n semn. out un singur reprezentnd suma cea mai ce se poate

Exemplu:
46. (Mouse ***) Un experiment comportarea unui pus ntr-o cutie
n mX1I egale de Fiecare
o cantitate de trebuie din (1, 1) al cutiei
n opus, mncnd ct mai El poate trece dintr-o n
una camere sunt au un perete comun), hrana
din atunci cnd nu ntr-o care
este cantitatea de pe care o poate mnca traseul pe care l poate urma
pentru a culege cantitate
de intrare mouse. in pe prima linie numere m 11 reprezentnd
de linii respectiv de coloane ale cutiei, iar pe m linii cele mXII
numere reprezentnd cantitatea de n fiecare cte 11 numere pe
fiecare linie, separate prin Toate valorile din sunt numere naturale ntre 1
100.
n de mouse. out se vor scrie pe prima linie numere separate printr-un
de vizitate cantitatea de Pe
linii se va scrie un traseu posibil pentru cantitatea sub de perechi de numere
(linie ncepnd cu 1 1 terminnd cu m 11.
Exemplu:
dom. out
semn. out
mouse. out
7 21
1 1
2 1
2 2
1 2
1 3
1 4
2 4
O
2
(Olimpiada de 2002, cls. IX)
153
dom. in
semn. in
mouse. in
2 4
1 2 6 3
3 4 1 2
3
2
3
5
3
2 O
O 1
O 2
1 b),d),e) 16 c) 30 c) 44 a),b),d) 58 b)
2 b),d),t) 17 b) 31 a),d) 45 c) 59 b),c),d)
3 a),b),t) 18 b),c),t) 32 b),c),d) 46 b),c) 60 c)
4 a),t) 19 a),b),e),t) 33 aj.b),e) 47 d),e),t) 61 b)
5 a),d),t) 20 b),c),e) 34 b) 48 b),c),d) 62 c)
6 a),d),t) 21 d) 35 a),b),d) 49 a) 63 b)
7 a),b),d),t) 22 b),c),t) 36 b) 50 a),c),d) 64 d)
8 b),e) 23 b),c),d),e) 37 a),d) 51 b),t) 65 a)
9 c),d),e) 24 a),c),t) 38 a),b) 52 c) 66 c)
10 a),c),d),e) 25 a),c) 39 a),d) 53 c),d) 67 c),d)
11 c) 26 d) 40 c),d) 54 c) 68 a).c)
12 b) 27 b) 41 c) 55 d) 69 a),b)
14 a),c),d),t) 28 b) 42 b),d) 56 c) 70 b),c),d)
15 d) 29 d) 43 a).c) 57 a) 71 b),c)
Sectiunea 1.1.1
#include <iostream.h>
#include <math.h>
int a,b,w: double x,Y:
void main() {
cinxy:
a= (int) (x*y): b= (int) (x/y) :
if (a<b) { w=a: a=b: b=w: }
if (x!=floor(x))
couta' 'b:
else coutb' 'a:
Secti/mea 1.1.2
#include <iostream.h>
int a,b,c,d,x:
void main() {
cinab;
c=a+b:d=a*b:
if (c>d) { x=c: c=d: d=x: }
if (a%2==0) coutc' 'd:
else coutd' 'c;
c) 26;
d) 4.2 1.3;
154
c) 1 1;
b) 22;
var a,b,w:integer: x,y:real:
beg-in
readln (x, y) ;
a:=trunc(x*y):b:=trunc(x/Y) ;
if a<b then beg-in
w:=a: a:=b: b:=w:
end;
if x<>trunc(x) then
write(a, ' ',b)
else write (b , ' , ,a) :
end.

var a,b,c,d,x: integer:
beg-in
readln (a, b) ;
c:=a+b: d:=a*b:
if c>d then beg-in x:=c: c:=d:
d:=x: end:
if a mod 2=0 then write(c, ' , ,d)
else write (d,", c ) :
end.
Solutie test 2
a) 589 2; b) O -3;
Solutie test 1
a) 36 68 respectiv -48 22 ;
test 3
a) 348 190 respectiv 3 211; b) 1000 200;
c) Cifra zecilor {0..5} cifra {(b mod 10+1)..9};
d)
var a,b:integer;
begin
readln (a, b) ;
if a mod 10 <b mod 10 then
a:=a - a mod 10 + b mod 10;
if a div 10 mod 10 >5 then
a:=a - a div 10 * 10
else b:= b - a mod 100;
writeln(a, , ,',b)
end.
#include <iostream.h>
int a,b;
void main() {
cinab;
if (a%10<b%10) a-=a%10-b%10;
if a/10)%10>5) a-=(a/10)*10;
else b-=a%100;
couta' 'bendl;
test 4
a) 41 31 7; b) Orice set de valori pentru care (sl +s2<60) (ml +m2<60) ;
c) unghiului dintre unghiuri exprimate n grade, minute,
secunde. Datele se citesc de la intrarea standard;
var

begin o '
read(sl,s2,m1,m2,gl,g2);
s := sl + s2; m := m1 + m2;
g := gl + g2;
if s>60 then begin
s := S mod 60; m := m + l;end;
if m>60 then beg-in
m := m mod 60; g := g + 1; end;
write( g,' " m,' , s) end.
#include <iostream.h>
int sl,s2,m1,m2,gl,g2,s,m,g;
void main() {
cinsls2m1m2glg2;
s=sl+s2; m=m1+m2; g=gl+g2;
if (s>60) { s%=60; m++; }
if (m>60) { m%=60; g++; }
coutg' 'm' 's;
}
test 5
a)"Exista numere negative" respectiv "Numere pozitive";
b) Orice triplet de numere negative;
[
a c a (a <O) Or (b <O) Or (c <o ) atunci
scrie 'Exista nr negativ'
altfel
scrie 'Numere pozitive'
d)
1 var a,b,c:integer;
2 beg-in
3 read(a, b , c);
4 if a*b<O then
5 write('Exista nr negativ')
else
if b*c<O then
write('Exista nr negativ')
else write('Numere pozitive')
10 end.
11
155
#include <iostream.h>
void main() {
int a,b,c;
cinabc;
if (a*b<O)
cout"Exista nr negativ";
else
if (b*c<O)
cout"Exista nr negativ";
else cout"Numere pozitive";
156
atunci
#include <iostream.h>
int a,b,c,x;
void main() {
cinabc;
if (a>b) {x=a;a=b;b=x;}
if (b>c) {x=c;c=b;b=x;}
if (a>c) {x=a;a=c;c=x;}
couta' 'b' 'c;
#include <iostream.h>
int a,b,c;
void main() {
cinabc;
if ((a+b) /2==c)
cout"Corect";
else if ((a+c)/2==b)
cout"Corect";
else if ((c+b)/2==a)
cout"Corect";
else cout"Incorect";
a H C
a H b
C H b
c:aCa(a>b) atunci
c:aca (b>c) atunci
c:aca(a>c) atunci
var a,b,c,x:integer;
begin
read(a,b,c) ;
if a>b then begin
x:=a;a:=b;b:=x end;
if b>c then begin
x:=c;c:=b;b:=x end;
if a>c then begin
x:=a;a:=c;c:=x end;
write(a,' ',b " ',c) end.
[
a c a ( (a+b) /2=c) or ( (a+c) /2=b) or ( (c+b) /2=a)
scrie 'Corect'
altfel
scrie 'Incorect'
end.
var a,b,c:integer;
begin
read(a,b,c);
if (a+b)/2=c then
write ( 'Corect' )
else if (a+c)/2=b then
write ( 'Corect' )
else if (c+b)/2=a then
write ( 'Corect' )
else write('Incorect')
Solutie test 8
a) 'Nu' respectiv 'Corect';
b) un triplet de numere citit, de la intrarea standard, lungimile
laturilor unui triunghi;
Solutie test 7
a) 3 17 38 respectiv 15 46 73;
b) Orice triplet de numere (a.b,c) pentru care c-ca-cb ;
e) un triplet de numere citit, de la intrarea standard, termenii unei
progresii aritmetice
Solutie test 6
a)"Corect" respectiv "Corect";
b) Orice triplet de numere care nu termenii unei progresii aritmetice;
test 1O
a) 12.300 12.030; b) Nu
c) Orice valoarea pentru x care are partea 0.00.
atunci
#include <stdio.h>
#include <math.h>
double x;
void main() {
scanf("%lf" ,&x);
x*=10.0;
if (((int) x)%10)
x=floor (x) 110. O;
else {
x*=10.0;
if (( (int) x) %10)
x=floor(x)/100.0;
else x=x/100.0;
}
printf("%.3f\n",x);
}
cina;
if (a%100<50) a-=a%100;
else a+=100-a%100;
coutaendl;
}
#include <iostream.h>
long a,b,c;
void main() {
#include <iostream.h>
int a,b,c;
void main() {
cinabc;
if ((a+b)<c) cout"NU";
else if ((c+b)<a) cout"NU";
else if ((c+a)<b) cout"NU";
else cout"corect";
157
var x:real;
begin
readln(x); x:=x*10;
if trunc(x)mod 10<>0 then
x:=trunc(x)/10
else begin
x:=x*10;
if trunc(x)mod 10<>0 then
x:=trunc(x)/100
else
x:=x/100
end;
write(x:0:3)
end.
var a,b,c:longint;
begin
read(a) ;
if a mod 100<50 then
a:=a - a mod 100
else a:=a + 100 - a mod 100;
writeln(a)
end.
end.
var a,b,c:integer;
begin
read(a,b,c);
if (a+b)<c then write('NU')
else if (c+b)<a then
write('NU')
else if (c+a)<b then
write('NU')
else write('corect')
[
a c a ( (a+b)<c)or( (a+c)<b)or( (c+b)<a)
scrie 'Nu'
altfel
scrie 'Corect'
Solutie test 9
a) 2300 respectiv 70200;
b) un natural de maxim 9 cifre, la cel mai apropiat ntreg divizibil cu 100.
Citirea se face de la intrarea standard.
c)
1
2
citeste ni
aca n mod 10 n div 10 mod 10 atunci
scrie n + 1, n+ 2
altfel
rdaca n mod 10 > n div 10 mod 10 atunci scrie n mod 10
4. altfel scrie n div 10 mod 10
Sectiunea 1.1.4
158
citeste Pi
d - P + 2*p + 4*p + 8*p
scrie di stop.
citeste ni
n _ n div 100
scrie n, n div 10 + n mod 10i stop.
citeste sl, s2, m1, m2, gl, g2i
s - sl + S2i m - ml + m2i g - gl + g2i
~ a c a s>60 atunci
~ s - s mod 60i m - m + li
~ a c a m>60 atunci
~ m - m mod 60i g - g + 1;
scrie g, m, Si stop.
citeste X,y,Zi
[
a c a x=y atunci a ~ 2*z
altfel
rdaca x*y<x+z atunci a ~ x*y
4. altfel a - x + Z
citeste ni
[
a c a n mod 10< n div 10 mod 10 atunci
scrie n mod 10, n div 10 mod 10
altfel
scrie n div 10 mod 10, n mod 10
citeste ni
scrie n div 100
scrie n div 10 mod 10
scrie n mod 10i stop.
23.
18.
Solutie test 1
a) 4 respectiv 5;
b) Oricare valori impare egale;
c) de numere pare aflate n intervalul [a, b];
d)
#include <iostream.h>
int a,b,c,i;
void main()
cinab;
c=O;
for (i=a;i<=b;i++)
if (i%2==0) CH;
if (c>O) coutc;
else cout"Nu exista";
159
var a,b,c,i :integer
beg-in
readln (a, b) ;
c:=O;
for i:=a to b do
if i mod 2=0 then inc(c);
if c>O then write(c)
alse write('Nu exista');
and.
Sectiunea 1.2.1
citeste n, m;
[
a c a n < m atunci
scrie n I m
altfel
scrie m I n
citeste n;
[
a c a n mod 2 = O atunci
scrie n - 2, n + 2
altfel
scrie n - 1, n + 1
Sectiunea 1.2.2
citeste a, b, c, d, e, s;
s a,div lai + b div Ibl + c div Ici + d div Idl + e div Iei
[
a CQ\ S > O atunci
scrie majoritatea pozitive
altfel
scrie majoritatea negative
,l
1 b),d) 9 c) 17 b),d) 25 e) 33 b)
2 b).c) 10 b),d) 18 a),c) 26 b),c),d) 34 a),c)
3 a) 11 a),b) 19 b) 27 a),c) 35 a)
4 c),d) 12 b),c) 20 c) 28 b),c) 36 d)
5 b),c) 13 c) 21 d) 29 a) 37 d)
6 c),d) 14 c) 22 c),d) 30 b) 38 b)
7 c),d) 15 a),d) 23 a),b) 31 c) 39 a),c)
8 b) 16 d) 24 b),c),d) 32 d)
#include <iostream.h>
int x,s,i,j;
void main() {
for (i=Oji<3;i++)
cinxj s=Oj
for (j=0;j<2jj++) S+=Xj
coutSj
}
}
#include <iostream.h>
int n,x,nr,i;
void main()
cinn;
nr=O;
for (i=Oji<n;i++)
cinx;
if (x<n I I x>2*n) nr+=x;
}
coutnr;
}
}
#include <iostream.h>
int x,s,i,j;
void main() {
for (i=lji<=5;i++)
cinxj s=Oj
for (j=ljj<=i;j++) s+=x;
coutSj
160
var n,x,nr,i :integer ;
begin
readln (n);
nr:=O;
for i:=l to n do begin
read(x) ;
if (x<n) or(x>2*n) then
nr:=nr+x;
end;
write(nr) ;
end.
var x, s, i, j :integer
begin
for i:=l to 5 do begin
read(x); s:=O;
for j:=l to i do S:=S+ x;
write(s)j
endj
end.
Solutie test 2
a)13;
b) Orice de n numere pentru care toate valorile intervalului [n, 2*n];
c) Orice de n numere pentru care toate valorile nu intervalului [n, 2*n];
Solutie test 3
a) 2, 4, 6;
b) Orice de trei valori multipli de 3;
c) se de 6 ori;
d)
var x,s,i,j :integer ;
begin
for i:=l to 3 do begin
read(x); s:=O;
for j:=l to 2 do S:=S+ x;
write(s) ;
end;
8 end.
9
Solutie test 4
a) 6, 10 12, 8 5;
b) 1, 1, 1 ,1, 1;
c) 15;
d)
1
2
Solutie test 5
a) 1,2,3,4,5,6,7,8,9;
b) O
c) De nori;
d)
var n,i, j :integer
begin
read(n) ;
for i:=l to n do
for j:=l to n do
write((i-1) *n+j);
end.
#inc1ude <iostream.h>
int n,i,j;
void main() {
cinn;
for (i=O;i<n;i++)
for (j=O;j<n;j++)
couti*n+j+1;}
#include <iostream.h>
int a,nr;
void main() {
cina; nr=O;
while (a!=O)
if (a%2==0) nr++;
cina; }
coutnr;
inc (nr) ;
var a, nr :integer
begin
read(a); nr:=O;
while a<>O do begin
if a mod 2=0 then
read(a) ;
end;
write(nr) ;
end.
test 6
a) 3; b) Orice de valori impare care se cu valoarea O;
c) Se citesc numere ntregi la ntlnirea valorii O. Cte numere pare au fost introduse?
d)
1
coutnr;
#include <iostream.h>
int x,nr;
void main() {
cinx; nr=O;
while (x! =0)
if (x%2==1) nr++;
x/=2;
}
inc (nr) ;
var x, nr :integer
begin
read(x); nr:=O;
while x<>O do begin
if x mod 2=1 then
x;=x div 2;
end;
write(nr) ;
end.
Solutie test 7
a) 3 pentru ambele-valori: b) Orice putere a lui 2.
c) Cte cifre de 1 apar n scrierea a lui x
d)
1
2
3
4
5
6
7
8
test 8
a) 3;
b) Orice de valori de diferite, introduse consecutiv, ce se cu o valoare

c) Orice de valori de paritate, introduse consecutiv;
d)
var x, nr,y :integer
begin
read(x); nr:=O;
while x<>O do begin
read(y) ;
if x mod 2=y mod 2 then
inc (nr);
x:=y;
9 end;
10 write(nr);
11 end.
#include <iostream.h>
int nr,x,y;
void main() {
cinx; nr=O;
while (x!=O) {
ciny;
if (x%2==y%2) nr++;
x=y;
}
coutnr;
}
161
Solutie test 10
a) 2; b) Orice de x valori ntregi ce nu intervalului [2,9]; c) 3;
X++i
if (x%5==0) nr++i
} while(nr!=2)i
coutXi
}
#include <iostream.h>
void main() {
int X,nri
cinxi nr=Oi
do {
#include <iostream.h>
int nr,X,Yi
void main() {
cinxi nr=Oi
do {
cinYi
if (y>l && y<10) nr++i
X--i
} while (xl=O) i
coutnri
}
coutii
}
#include <iostream.h>
int i,p,Xi
void main() {
i=Oi p=li cinxi
while (x) {
i++i P*=Xi
cinxi coutp' 'i
}
}
#include <iostream.h>
int i,Xi float Pi
void main() {
i=Oi p=Oi cinxi
while (x) {
i++i P+=Xi
cinxi coutp/i' 'i
162
b) 1,2, O;
var x, nr :integer
begin
read(x) i nr:=Oi
repeat
inc(x) i
if x mod 5=0 then inc(nr)i
unt!l nr=2i
wri te (x) i
end.
var x,nr,y:integeri
begin
read(x)inr:=Oi
repeat
read(y) i
if (y>1)and(y<10) then
inc (nr) i
dec(x)i
until X=Oi
write(nr)i
end.
var p,i,x:integeri
begin
i:=Oi p:=li read(x) i
wh!le x<>O do begin
inc(i)iP:=P*Xi
read(x)iwrite(p,' 'li
endi
write(i)i
end.
var p,i,x:integeri
begin
i:=Oi p:=Oi read(x) i
while x<>O do begin
inc(i)i P:=P+Xi
read(x) iwrite(p/i:0:2) i
endi
end.
Solutie test 9
a) 10; b) 1, 2, 3, 4;
c)Orice pentru care cifra este 5, 6, 7, 8,9;
Solutie test 11:
a) 2, 6, 24, 120,4;
c)
couts;
}
#include <iostream.h>
int i,x,n,nr,s;
void main() {
cinn; s=O;
for(i=lii<=nii++)
nr=li cinx;
while (x>10) {
nr*=10; x/=10;
}
s+=nr*x;
var n,i,nr,s,x:integer;
begin
read(n); s:=O;
for i:=l to n do begin
nr:=l; read(x);
while x>10 do begin
x:=x div 10;
nr:=nr*10;
end;
s:=s+x*nr;
end;
writeln(s);
end.
9
10
11
12
13
Solutie test 12:
a) 22222;
b) n=5 i numerele 10,20,300,4000,5000;
c)
1
Solutie test 13:
a)
*
**
***
****
5
6
7
8
9
10
11
12
b)
intreg n,i,j;
citeste n;
rpentru i f-n, 1 ,-1 executa
rpentru jf-l, n-i executa
l.. scrie ' ';
l
rpentru jf-n-i+l,n executa
l.. scrie '*';
scrie salt la linie noua
d)
intreg n,i,ji
citeste n;
rpentru if-l, n executa
rpentru jf-n-i+l,n executa
l.. scrie '*';
l
rpentru.jf-l, n-i executa
l.. scr:Le ' ';
scrie salt la linie noua
c)
1
2
3
4
5
6
var n,i,j:integer;
begin
read(n) ;
for i:=l to n do begin
for j:=l to n-i do write('
, ) i
for j:=n-i+l to n do
write ( '* , ) ;
writeln;
end;
end.
#include <iostream.h>
int n,i,j;
void main() {
cinn;
for (i=l;i<=n;i++) {
for (j=l;j<=n-i;j++)
cout-c-c " Il i
for (j=n-i+l;j<=nij++)
cout"*lli
coutendli
}
}
163
164
e)
pentru i f- 2, n-2 executa devine pentru i f-2, [1112] executa.
}
}
c) n=14;
#include <stdio.h>
#include <math.h>
void main() {
int nr,n,j/oki float Xi
scanf("%d",&n); nr=O; x=n;
do {
nr=nr*lO+n%lO; n/=lO;
} while (n);
ok=l;
for(j=2;j*j<=nr;j++)
if (nr%j==O) ok=O;
if (ok) printf("%.2f\n",nr/x);
else printf("%.2f\n",x/nr);
#include <iostream.h>
#include <math.h>
void main() {
int n,i,j,ok; cinn;
for (i=2;i<=n-2;i++){
ok=l;
for (j=2;j*j<=i;j++)
if (i%j==O) ok=O;
for (j=2;j*j<=n-i;j++)
if ((n-i)%j==O) ok=O;
if (ok)
couti' 'n-iendl;
b) n=l;
end;
end.
var x,nr,n,j:integer;
ok:boolean;
begin
readln(n); nr:=O; x:=n;
repeat
nr:=nr*lO+n mod 10;
n:=n div 10;
until n=O;
ok:=true;
for j:=2 to trunc(sqrt(nr))do
if nr mod j=O then
ok:=false;
if ok then writeln(nr/x:0:2)
else writeln(x/nr:0:2);
end.
var n,i,j:integer;
ok:boolean;
begin
read(n) ;
for i:=2 to n-2 do begin
ok:=true;
for j:=2 to trunc(sqrt(i))do
if i mod j=O then ok:=false;
for j: =2 to trunc (sqrt (n-i) ) do
if (n-i)mod j=O then
ok:=false;
if ok then
writeln(i,' ',n-i);
Solutie test 14:
a) 0.42;
b) n=l;
c)
Solutie test 16:
a) 59;
b) 11 =4 25, 35,435, 15;
e) n=1 n=l1;
d)
Solutie test 15:
a)
37
55
73
var i,n,x,e,max1,max2:integer;
begin
read(n) ;
max1:=-1; max2:=-1;
for i:=l to n do begin
read(x); e:=x mod 10;
if e>max1 then begin
max2:=max1;
max1:=e;
end
else
if (e>max2)and(e<>max1)
then max2:=e;
end;
writeln(max2, ' ',max1);
end.
#inelude <iostream.h>
void main() {
int i,n,x,e,max1,max2;
einn;
max1=-1; max2=-1;
for(i=l;i<=n;i++)
einx; e=x%10;
if (e>max1) {
max2=max1;
max1=e;
}
else if (e>max2&&e!=max1)
max2=e;
eoutmax2" "max1;
intreg n,i,max,nr,x,e; citeste n;


r
p e n t ru ir-1, n executa
citeste x;
I
ce-x mod rl o ,
rdaca e>max atunci
I I
max-s-c ,
altfel
rdaca (e=max)
l
L.l.at=c' nr<--nr+l,
scrJ.e max, nr;
stop.
Solutie test 17
a) 25, 313, 3,1,502;
b) 11, 1,91,31;
c)
1 var i,x,n,e:integer;
begin
read(n) ;
for i:=l to n do begin
read(x) ;
e:=O;
repeat
e:=e*10+x mod 10;
x: =x div 100;
until x=O;
writeln (e) ;
end;
end.
165
#inelude <iostream.h>
void main(){
int i,x,n,e;
einn;
for (i=l;i<=n;i++)
einx; e=O;
do {
e=e*10+x%10;
x=x/100;
} while (x);
eoute;
}
}
1;
n executa
citeste n; p ~
j
ent ru i ~ 1,
citeste y;
Ix+- n;
z ~ y;
[
&t _t i mp x<>z executa
~ a c a x>z atunci x ~ x-z
1.:1tfel z ~ z-x
//determin cmmdc dintre y si n
c:ac& x 1 atunci p ~ p * y;
citeste n; s ~ O; nr ~ O;
r
pent ru i ~ 1, n executa
citeste y;
ok ~ True;
[
ent ru j ~ 2, Y div 2 executa
c:aca y mod j =0 atunci ok ~ False
//verific daca numarul y este prim
rdaca ok atunci
Ils ~ s + y;
Ll-a nr ~ nr+1;
scrie s / nr
166
Sectiuflea 1.2.4
intreg n,i,c,x;
citeste n; i+-1;
r
at _t i mp i<=n executa
citeste x;
I
c+-O;
rcat_timp x>O executa
I I c+-c*10+x mod 10;
I ~ x+-[x/100j
I scrie C; i+-i+1;
41 stop.
citeste n; p ~ 1;
rpentru i ~ 1, n executa
L. p ~ p*2*i
scrie p
3.
2.
10
V
unde veste numarul de cifre
IlaI valorii minime
4.
2
3
4
5
6
7
8
5.
1
2
3
4
5
6
7
8
9
10
11
9.
1
2
3
citeste n, p d ~ n div 2; nr ~ O;
[
a t _ t i mp (d > 1) and (nr < p) executa
raaca n mod d =0 atunci
l. scrie d; nr ~ nr + 1;
d ~ d - 1; Iise parcurg in sens invers divizorii lui n
scrie p
citeste a, b; s ~ O; nr ~ O;
pentru i ~ a, b executa
x ~ i; y ~ O;
[
a t _ t i mp x<>O executa
y ~ y * 10 + x mod 10
x ~ x div 10
Ildetermin inversul lui i in variabila y
G : a c ~ y i atunci s ~ s + i; nr ~ nr + 1;
scrie s I nr
{Fie min si max minimul si maximul celor 3 valori citite}
x +- min; p ~ 1;
[
a t _ t i mp x<>O executa
p +- P * 10 Iicalculam
x +- X div 10
scrie p * max + min
11.
8
citeste s;
pentru i ~ 1, s div 2 executa
l
p e n t ru j ~ i + 1, s executa
aca (s-i-j>j) atunci
scrie i, j , s - i - j
C Ilgenerez toate tripletele
Ilde valori crescatoare
(i, j, k)
de suma S
13.
1
2
3
4
5
6
7
8
9
citeste n, x, y ; nr +- O;
pentru i ~ 3, n executa
citeste z;
raaca (x+y>z)and(x+z>y)and(y+z>x)
l.nr ~ nr + 1
X +- y; y ~ z;
scrie nr
167
atunci
//incluse
//disjuncte
1;
nr + 1;
nrinc + 1;
nrdij + 1;
nr ~ o;
n ~ n + 1;
fiSe verifica daca n este prim
raaca(n este prim) atunci
~ scrie n; nr ~ nr + 1;
pana_cand nr = 2
168
n, max;//initializez maximul cu prima valoare din sir
//numarul de aparitii al valorii maxime
pentru i ~ 2, n executa
citeste x;
[
a c a (x > max) atunci max ~ x; nr
altfel c:aca (x = max) atunci nr
citeste n;
x ~ 1;
nr ~ O;
r
x e c u t a

a c a :2*X+1}mod n =0 atunci
scr1e x, x + 1;
I I nr ~ nr + 1;
L
~ ~ x + 1;
pana_cand nr = n
citeste n, a, b
pentru i ~ 2, n executa
citeste x, y;
c:aca (x > b) atunci nrdij
c:aca (y < b) atunci nrinc
citeste n, maxl, max2; //citestc primele 2 valori din sir
c:aca maxl < max2 atunci maxl - max2;
pentru i ~ 3, n executa
citeste X;
[
a c a (x > maxl) atunci max2 ~ maxl; maxl ~ x;
altfel c:aca (x > max2) atunci max2 ~ x;
//max2, maxl valorile maxime din sir (max2 < max1)
20.
31.
15.
36.
1
2
54.
1
2
3
citeste X;
[
xe cu t a
scrie X mod b;
x +- X div b;
pana_cand x = O;
citeste n;
nr +- O;
pentru i +- 1,n executa
[
a t _t i mp x mod 5 =0 atunci
nr +- nr + l;//determin nr. de factori de 5 din factorial
x +- X div 5;
citeste a, b, x; nr +- O;
cat_timp x <> O executa
y +- O;
[
a t _t i mp x >9 atunci
r " a c ~ i . ' (x mod 10=b) and (x
l. y +- 1;
x+-xdiv10;
nr +- nr + y;
citeste x
l.JI
div 10 mod 10 =a)atunci
8
9
citeste x;
max +- O;
p +- 10;
l
c a t _t i mp x <> O executa
r"aca (x div p) * (x mod p) > max
l.max +- (x div p) * (x mod p);
p +- P * 10; x +- X div 10
atunci
X +- s;
> O executa
mod 10;
10;
60.
1
2
3
citeste x; //determin cifra de control a unui nr x
cat_timp x > 9 executa
S +- O;
[
a t _ t i mp x
S +- S + x
X +- X div
169
170
Sectiunea 1.3.2
logic ok;
y;
y;
mod 10))or
mod 10)) atunci ok _ false;
"Numarul de valori-panta: ", x;
"Cea mai mica valoare-panta: ", mini
"Cea mai mare valoare-panta: ", max;
intreg n, i, nr, c1, c2, x, y
citeste n;
x _ O; min _ 10
8
; max _ -10
8
;
pentru i - 1,n executa
citeste nr;
ok truei y - nr;
cl nr mod 10;
c2 (nrdiv 10) mod 10;
nr nr div 100;
[
a t timp nr>O executa
daca ((c1<c2)and(c2>nr
((cl>c2)and(c2<nr
c2 - nr mod 10;
nr nr div 10;
[
a c a ok=true atunci
x _ x+l;
daca min>y atunci min
daca max<y atunci max
intreg n, i, j; logic ok;
citeste n;
- 3;
at timp n>O executa
ok _ truei
rpentru j-2, executa
4. daca i mod j=O atunci ok - false;
raaca (ok=true)and(i mod atunci
L. ok - false;
G:aca ok=true atunci n - n-1;
i _ i+2;
2. Se cel mai mare perfect mai mic strict ca 11 apoi se matricea.
3. este format din numere prime care au ultima cu 7.
4. este 5*n.
5. Se valorile n timpul citirii.
1. Se total de din zona de din
zona Soveja. de din fiecare reorganizare va fi cel mai
mare divizor comun al celor numere.
6. Se avansnd an cu an.
7. Pentru fiecare de la ] la n se exponentul lui k n descompunerea lui n
factori primi.
1
2
3
4
'5
intreg n, k, nr, exp;
citeste n, k;
exp <- O;
pentru i <- I,n executa
citeste nr;
[
a t timp nr mod k=O
exp <- exp + 1;
nr <- nr div k;
exp;
executa
8. Luni: nasul lui Pinochio n centimetri, n fiecare zi de Luni,
Miercuri, Joi Vineri nasul cu cte p centimetri iar Duminica scade cu
cte] cm. Pentru a determina lungimea nasului k zile, va trebui sa cele k
zile n zile: k zile => (ks = k div 7) +(kz = k mod 7) zile
ntr-o nasul cu (5*p-2) cm.
Pentru cele (k mod 7) zile vom determina lungimea nasului lui Pinochio astfel:
kz=6 este vorba de ziua de L=L+5*kz-l, altfel e vorba de o zi
L=L+ pskr:
9. Din numerele naturale de la 1 la n cte sunt divizibile cu p (multiplii lui p), attea
scnduri vor fi vopsite cu multipli de q attea scnduri vor fi vopsite n
albastru. Din cele n scnduri vor fi vopsite cu ambele culori attea, cte numere care
sunt multipli ai lui p ai lui q, multipli ai lui c.m.m.m.c.(p,q).
10. n prima zi cangurul sare 7 metri. n ziua a doua cangurul sare n plus de prima zi,
de 10 ori mai mult, 7+7*10=77 metri. n a treia zi cangurul sare n plus de prima
zi, de 10 ori mai mult dect n a doua, 7+77*]0=777 metri. mai departe. Deci,
n n zile cangurul va 7+77+777+7777+....
11. a) se rezolva determinnd cifrele Pentru b) se iau toate
cifrele de la 9 la O se vede de cte ori apare fiecare att n a cat n b. Apoi se
de cte ori se n a b.
12. Se cifrele pentru rezolvarea
13. Rezolvarea se pe de de pe fiecare rnd
termenii lui Fibonacci: ] ] 23 5 8 13, mai primul termen, care
intreg ka, kb, a, b, c, nr;
citeste ka, kb;
a <- O;
b <- 1;
171
X <- Yi
172
d atunci max <- d;
max
ka + (b+1) div 2;
kb + b div 2;
nr -1, ka, kb;
at timp (ka>O)and(kb>O) executa
C <- a + bi
nr nr + li
ka <- ka - (c+1) div 2;
kb <- kb - c div 2;
a <- bi b <- Ci
intreg n, x, y, z, d, max;
citeste n;
Oi
d <- Oi
max <- Oi
pentru i <- 1, n executa
citeste y, Z;
[
a c a x < y atunci
daca max < d atunci max <- di
d <- O;
raltfel
L. d <- d + Zi
intreg n, 1;
citeste n;
1 <- li
[
a t timp l<n executa
n <- n - 1;
1 <- 1 + 1;
scrie "A",1-n+1, B",n;
stop.
14. Se dintr-o parcurgere lungimea celei mai lungi continue
parcurse gfie.
15. Se triunghiul n unul dreptunghic isoscel. Cele diagonale vor
corespunde liniei coloanei pe care se n n triunghiul deformat.
16. Se citesc succesiv numere scrise pe stlpi contoriznd de becuri albe,
respectiv galbene, depistate n acel moment. Pe baza acestor se
culoarea becului curent.
15
16
17
18
19
20
21
22
23
24
25
26
27
intreg n, i, nr, a, g;
citeste n;
a <- O; g <- O;
pentru i <- 1, n executa
citeste nr;
aca i mod 2=0 atunci
[
a c a nr=g atunci
scrie "Becul ",i,": alb";
a <- a + 1;
[
l t f e :-
scr:Le "Becul ",i,": galben";
g <- g + 1;
altfel
[
a c a nr=a atunci
scrie "Becul ",i,": alb";
'. a <- a + 1;
[
l t f e l
scrie "Becul ",i,": galben";
g <- g + 1;
\1'
stop.
17. n prima se n una Pentru a determina nivelul s-ar
putea efectua repetate simulnd pe niveluri,
dar abordare este prea se folosesc n locul
11
12
13
14
15
16
17
18
19
20.
.21
22
23
intreg m, n, a, b, niv, t;
citeste m,n;
niv <- O;
a +- mi
b <- n;
[
a t timp b>O executa
t <- a;
a <- b;
b <- t mod b;
m <- m diva; n <- n diva;
at timp (m>lland(n>l) executa

m>n
nlV <- nlV + m div n;
m <- m mod n;
[
l t f e l
niv <- niv + n div m;
n <- n mod m;
scrie niv+m+n-l;
stop.
173
19. Pentru a la se numerele prime din
174
- 1)) div nr;
r;
raaca nr>l atunci
l. phi +- (phi * (nr
r +- r + 2*phi;
intreg n, k, f;
citeste n;
k +- li f +- li
[
a t timp f<n executa
k +- k + li
f +- f * ki
scrie ki
stop.
intreg n, i, j, nr, phi, r;
citeste n;
r +- 1;
pentru i+-2, n executa
nr +- ii phi +- nr;
pentru executa
raaca nr mod j=O atunci
l. phi +- (phi * (j - 1)) div j;
rat timp nr mod j =0 executa
l. nr +- nr div j;
21. Se toate valorile posibile pentru k ncepnd cu 1 cnd se cea

22. Se n fiecare se suma cifrelor.
23. Din a
2+b2=e2
se determina a
2=c2_b 2
<::> a
2=(e-b)*(e+b).
Se divizorii d ai
lui a
2
din e-b-ed e+b=a
2/d
se b,
20. Fie phi(x) = cte numere mai mici ca x sunt prime cu x. Rezultatul va fi
1+(phi(2)+... +phi(n)). Pentru a calculaphi(x) se formula:
phi(x) = {1-.-!-I1--1).. (1 __1)
PI P2 r,
Unde p-, P2" Pksunt factorii primi din descompunerea lui x.
18. Se distribuie numere consecutive pe diagonale, plasnd pe orice elemente cu
valoare (se ca toate diagonalele sunt formate din n elemente, se
cu indici mod n). Pentru a completa cnd suma elementelor este fix S, se cte o
unitate elementelor tabloului pornind de la cea mai mare valoare, pe diagonala sa,
continundu-se cu valorile
intreg a, b, c, di
citeste a;
pentru d 1, a-l executa
[
a c a ((a*a+d*d)mod(2*d)=0)and((a*a-d*d)mod(2*d)=0)
b (a*a+d*d)div(2*d)i
c (a*a-d*d)div(2*d) i
scrie b, Ci
atunci
24. Deoarece R are limita mica (30), se verifica daca toate punctele (x, y, z) cu x, y, z :::: R
sunt n
intreg x, y, z, r, nri
citeste r;
nr Oi
pentru x 1, r executa
pentru y 1, r executa
[
e n t ru Z 1, r executa
raaca x*x+y*y+z*z<=r atunci
l. nr nr+1i
nri
25. n este divizibil cu 3 rezultatul va fi 3*3... *3, n are restul 2 la cu 3
rezultatul va fi 3*3*... *3*2, iar are restul 1 rezultatul va fi 3*3*... *3*4.
3=1 executa
(n-4) div 3 executa
n div 3 executa
r 4i
rpentru i 1,
La r <- r * 3i
scrie ri
aca n mod 3=2 executa
r <- 2i
rpentru i 1, (n-2) div 3 executa
La r <- r * 3i
scrie ri
intreg n, y, z, r, nri
citeste n; nr Oi
aca n mod 3=0 executa
r li
rpentru i 1,
La r r * 3i
scrie ri
2'4 stop.
175
27. Rezultatul cerut este (A+ 1)*(B+ 1) *(A+B+2)12.
176
intreg n, i, nr;
citeste n;
nr ... 1;
rpentru i ... 4, n executa
4a nr ... nr + (nr+l) div 2;
scrie nr;
stop.
29. Se pentru determinarea rezultatului. Pentru a determina cte
cifre de O are la produsul 1*2*... *nr se exponentul lui 5 n
descompunerea produsului folosind formula:
30. Se face elementul 3 invizibil n lor se scade cu o unitate fiecare Se
astfel de doar fiecare al 3-lea pas se Eliminnd
care se sunt necesare j(n-l) pentru a aduce n-1 pe prima (care era
n n prima s-au eliminat exact (f{n-l)+ 1) div 2 se deduce
j(n)=j(n-l)+(f{n-l)+I) div 2.
[
nr ] [nr] [nr] [nr] O
+ 2 + 3 + 4 +... +
5 5 5 5
28. de pe linia L coloana C va fi (L - 1) xor (C - 1).
1 intreg n, i, j, nr;
2 citeste n;
3 nr ... O;
4 scrie "lmin=" ,n* (n-l) div 2," chei=" ,n* (n-l);
[
e n t ru i ... 1, n-l executa
[
e n t ru j ... i+l, n executa
scrie 1I1ac a t ll,nr,":II,i," lI,ji
nr ... nr + 1;
stop.
26. Pentru orice grup care trebuie format din n-Z persoane (conform problemei)
trebuie existe cel un pe care nu-l va deschide nimeni din grup.
celelalte persoane n afara grupului fiecare cheia respectiv.
Astfel, atunci cnd una din cele persoane n grupul de n-2 persoane, va
putea fi deschis. Se deduce la fiecare trebuie existe exact chei. Tot de aici
se deduce de este egal cu grupurilor distincte formate din n-2
persoane, n*(n-1)/2. Atunci total de chei va fi n*(n-l).
Sectiunea 2.1.2
Teste cu alegere din capitolul 2
#include <iostream.h>
void main() {
int i,n, a[100];
cinn;
for (i=O;i<n;i++) cina[i];
for (i=1;i+1<n;i++)
if (a[i]/10==0)
a[i]=a[i-1]+a[i+1];
for (i=O;i<n;i++) couta[i];
}
#include <iostream.h>
unsignad char a[100];
int i,n,x;
void main{) {
cinn;
for (i=O;i<n;i++) cina[i];
for (i=0;i+1<n;i++)
if (a [i] >a [i+1]) {
x=a[i];a[i]=a[i+1]; a[i+1]=x;
}
for (i=O;i<n;i++) couta[i];
}
a : .. 100]of byte;
, n , x: "lnteger;
(n) ;
i:=l to n do read(a[i]);
i:=l to n-1 do
if a[i]>a[i+1] than bagin
x:=a[i] ;a[i] :=a[i+1] ;a[i+1] :=x;
and;
i:=l to n do write{a[i]);
: array[1 .. 100]of byte;
i, n: integer;
bagin
read{n) ;
for i:=l to n do read(a[i]);
for i:=2 to n-1 do
if a[i]div 10=0 than bagin
ari] := a[i-1] + a[i+1];
and;
for i:=l to n do write{a[i]);
and.
test 2
a) 22, 32,10,26,16; b) Orice cu elemente mai mari strict dect 9;
c) de la linia 7 devine:
c:aca ari] < 10 atunci ...
test r
a) O1 2436; b) Orice de valori ordonate
c) n= 6 O2 l 43 5 ;
d
2.1.1 2.1.1 2.2.1 2.2.1 2.3.1
1. a),d) 9. b) 1. a), c) Il. b),d) 1. d)
2. c) 10. a),c) 2. a), b) 12. d) 2. b)
3. b),c) Il. d) 3. b), c) 13. c) 3. c)
4. b) 12. b) 4. d), e) 14. c) 4. b),d)
5. b),c) 13. b) d) 5. d) 15. c) 5. d)
6. d) 14. a) e) 6. c) 16. b) 6. a)
7. a) 15. b) 7 b), d) 17. b) 7. b)
8. d) 8. d) 18. c) 8. c)
9. c) 10. d) 19.b) 9. b)
177
178
#include <iostream.h>
int i,n,nr, a[100];
void main{) {
cinn; nr=O;
for (i=O;i<n;i++) cina[i];
for (i=0;i+1<n;i++)
if (a[i]*a[i+1]<0) nr++;
if (nr==O) cout"DA";
else cout "NU" ;
}
for (k=i;k<=j;k++) couta[k];
}
#include <iostream.h>
int a[100];
int i,n,x;
void main ()
cinx; n=O;
while (x! =0) {
a[n++]=x%10;
x/=10;
}
for (i=O;i<n;i++) couta[i];
}
#include <iostream.h>
unsigned char a[100];
int i,n,j,k;
void main() {
cinn;
for (i=O;i<n;i++) cina[i];
i=O; j=n-1;
while (a[i]==a[j] && i<=j) {
i++; j--;
: array[1 .. 100]of byte;
i, n, x: integer;
begin
readln{x); n:=O;
while x<>O do begin
inc{n); a[n]:= x mod 10;
x:=x div 10;
end;
for i:=l to n do write{a[i])
end.
: array[1 .. 100]of byte;
i, n, j, k:
begin
read{n) ;
for i:=l to n do read{a[i]);
i:=l; j:=n;
while {a[i]=a[j])and{i<=j)do
begin
inc ( i); dec ( j ) ;
end;
for k:=i to j do write{a[k])
end.
var a:array[l .. 100]of integer;
i, n, nr: integer;
begin
read(n); nr:=O;
for i:=l to n do read{a[i]);
for i:=l to n-1 do
if a[i]*a[i+1]<0 then inc{nr);
if nr=O then write{'DA')
else write{'NU')
10 end.
11
Solutie test 5
a) NU;
b) Elementele situate pe consecutive fie de semne contrare;
c) Orice de numere de semn;
d)
1
2
3
4
Solutie test 4
Solutie test 3
a) 3,4, 1,2;
b) Orice pentru care prima ultima valoare sunt diferite;
c) Orice de valori egale;
d
a) 1 4 3 02;
b) Orice palindrom (egal cu citit de la drapta la stnga);
d
Solutie test 6
a) 2, 3, 6, 1 respectiv 2, -1;
b) Orice vector n care nu nici un element egal cu suma vecinilor
d) Nu Primul ultimul element nu pot fi
var a:array[l .. 100]of integer;
n,j,i:integer;
begin
readln(n) ;
for i:=l to n do read(a[i]);
i:=2;
while i<n do
if a[i]=a[i-1]+a[i+1] then
begin
for j:=i to n do a[j] :=a[j+1];
dee(n) ;
end
else fne (i) ;
for i:=l to n do write(a[i] , , ')
end.
#inelude <iostream.h>
int a[100],n,i,j;
void main() {
einn;
for (i=O;i<n;i++) eina[i];
i=l;
while (i+1<n)
if (a[i]==a[i-1]+a[i+1]) {
for (j=i;j<n;j++)a[j]=a[j+1];
n-- i
}
else i++;
for (i=O;i<n;i++)
eouta [i]' ';
Solutie test 7
a)2;
b)Orice de n valori pentru care cifra care apare de cele mai multe ori n scrirea lor este O;
var nr:array[0 .. 100]of integer;
n,e,max,i,j:integer;
begin
readln(n) ;
max:=O;
for i:=l to n do begin
readln(j) ;
while j<>O do begin
ine(nr[j mod 10]);
if max<nr[j mod 10] then
begin
max:=nr[j mod 10];
e:=j mod 10;
end;
j:=j div 10;
end;
end;
writeln(e) ;
end.
#inelude <iostream.h>
int nr[101],n,e,max,i,j;
void main() {
einn; max=O;
for (i=O;i<n;i++)
einj;
while (j!=O) {
nr[j%10]++;
if (max<nr[j%10])
max=nr[j%10] ;
e=j%10;
}
j/=10;
}}
eouteendl;
}
Solutie test 8
a) 2 2 34 *5 6 78 * 8 3;
b) Orice de n valori;
c) prin caracterul '*' monoton n care poate fi
vectorul A de lungime n;
179
d) n - 1. n cazul unui vector cu valori ordonate
iso
#include <iostream.h>
int a[lOO],n,i,j,x,p,m;
void main() {
cinnx;
for (i=O;i<n;i++) cina[i];
p=-l;
i=O;
j=n-l;
while (i<=j && p==l)
m=(i+j)/2;
if (a[m]==x) p=m;
alse
if (x<a[m]) j=m-l;
alse i=m+l;
}
coutp+lendl;
}
#include <iostream.h>
int a[lOO],n,max,i;
void main() {
cinn;
max=l;
for (i=O;i<n;i++) cina[i];
couta[O]' ';
for (i=l;i<n;i++)
if (a[i]<a[i-l])
max++;
cout"* "a[i]" ";
}
alsa couta[i]" ";
coutmaxendl;
}
end;
writeln (p) ;
and.
var a:array[l .. lOO]of integer;
n,i,j,x,p,m:integer;
begin
readln(n,x) ;
for i:=l ta n do read(a[i]);
p:=O;
i:=l;
j:=n;
while (i<=j)and (p=O) do begin
m:=(i+j) div 2;
if a[m]=x then p:=m
alse
if x<a[m] then j:=m-l
else i:=m+l
a) 9, 4, 2 respectiv 23;
b) Nu
c) nr maxim de n care poate fi un de
n valori;
d) de valori trebuie fie ordonat strict
Solutie test 10
e)
1 var a: array [1 .. 100] of integer ;
2 n,max,i:integer;
bagin
readln(n) ;
max:=l;
for i:=l ta n do read(a[i]);
write(a[l] , , ');
for i:=2 ta n do
if a[i]<a[i-l] than begin
inc(max) ;
wri te ( '* ',a [i] " ')
and
alsa write (a [il " ');
wri teln (max) ;
and.
Solutie test 9
a) 2 respectiv O;
b) m mijlocul din vector situate ntre indicii i, j. Valoarea variabilei p
n pe care s-a valoarea x;
d) 10
e)
1.
2.
var a:array[1 .. 100]of integer;
n,k,i,x,nr:integer;
begin
read(n,a[l]); nr:=l;
for i:=2 to n do begin
read(x); k:=l;
while (x<=a[k])and(k<=nr)do
inc(k) ;
if k=nr+1 then inc(nr);
a[k] :=x;
end;
for i:=l to nr do write(a[i]);
end.
#include <iostream.h>
int a[100],n,k,i,x,nr;
void main() {
cinna[O];nr=l;
for (i=l;i<n;i++) {
cinx; k=O;
while (x<=a[k] && k<nr) k++;
if (k==nr) nr++;
a[k]=x;
}
for (i=O;i<nr;i++) couta[i];
Sectiunea 2.1.4
n executa
+ a [i];
+ a[n-i+l]
6.
nr 1;
pentru i 2, n executa
[
a c a a[i]>max atunci
nr 1;
altfel
a[i]= max atunci
ns o; nd o;
[
e n t ru i 1,
ns ns * 10
nd nd * 10
II se reinitializeaza max
nr nr + 1;
Iinumarul de la stanga la dreapta
Iinumarul de la dreapta la stanga
10.
6
7
f
Pe n t ru i
r
p e nt ru
rd
ac a

1, n-1 executa
j i + 1, n executa
(a[i]<a[j])and(a[i]*a[j]<>O) atunci
ali] a[j] II se interschimba elemente nenule
11.
1. x a[l]
2 cat_timp i<n+1 executa
3 aca a[i]=x atunci
4 centru j i, n-1 executa
5 a[j] a[j+1] II se sterge elementul ali]
6
n n - 1 Iise micsoreaza numarul de elemente
altfel
Iise continua parcurgerea
181
182
II plasam un nou element in B
Iilungimea secv. curente este>
Ilactualizez lung. maxima
Ilprimului element pozitiv din
II secventa curenta i se retine
Ilin variabila p pozitia in sir
ok o- truei
Iise continua parcurgerea
Ilactua1izez nr maxim de aparitii
(i<=n) executa
II se parcurge vectorul cat timp
II elementele sunt egale cu a(x]
Iiconstruim vectorul B ce cuprinde
II elementele din A fara repetitii
po- i
nr ~ o Iila un element negativ resetez
Iilungimea secventei
i o- p1, p1+max-1 executa scrie a(i]
pentru i o- 1, m executa
nr o- Oi II determin numarul de aparitii ptr bei]
[
e nt r u j o- 1, n executa
~ a c a b(i]=a[j] atunci nr o- nr + li
scrie b(i], nr
p o- li nr o- Oi max o- Oi
pentru i o- 1, n executa
[
a c a a(i]>O atunci
~ a c a nr = O atunci
inc(nr)
~ a c a nr > max atunci
~ m a x o- nri p1 o- Pi
~ a c a a(i]<O atunci
Pasul 1: Ordonare vector A
i o- 1;
nr o- O;
at_timp i<n+1 executa
x o- i
rcat_timp (a(i]=a(x]) and
l.i o- i + 1
[
a c a (i.- x) > nr atunci
nr ~ l - X
V o- a (x]
m o- Oi
pentru i o- 1, n executa
ok o- falsei
[
ent ru j o- 1, m executa
~ a c a a(i]=b(j] atunci
~ a c a not ok atunci
~ m o- m + li b(m] o- ari]
14.
12.
16.
18.
5
6
7
8
9
entru p _ 1, n executa
a[n+1] a[l];
rpentru j - 1, n executa
la a[j] - a[j+1]
rpentru j - 1, n executa
la scrie a [j ]
Iise genereaza cele n permutari
Ila[l] se plaseaza pe pozita n+1
II se sterge primul element
1; p2
-
1;
a [i]; p1 ii
IIp1 = pozitia maximului
a [i] ; p2
-
ii
IIp2 = pozitia minimului
23.
1
2
3
4
6
7
8
9
10
min _ a[l]; max _ a[l]; p1 _
[
e n t ru i _ 1, n executa
G:aca a[i]>max atunci max
G:aca a[i]<min atunci min
G:aca p1>p2 atunci p1 <-> p2
Ordonare vector A intre p1 si p2
Ilinterschimb pentru ca p1<p2
\1 ~
prin
a[p]
pozitia elmentului nul lip
ii
[
e n t ru i _ 1, n executa
G:aca a[i]=O atunci p
[
p e n t ru i _ 1, n-1 executa
pentru j _ i + 1, n executa
r
a c a (a[i]<a[j])and(a[i]*a[j]<>O)atunci
ali] <-> a[p]; ali] <-> a[j]; a[j] <-> a[p]
L
I l.tI II interschimb elemente '" O
41 II intermediul elementului
8
9
10
11
26.
1
1, n executa scrie ali]
28.
1
2
3
4
5
a[l] _ 1; P - 1; m - 1;
L
a t _ t i mp m < n executa
m _ m + 1; a[m] 2* a[p]
m _ m + 1; a[m] _ 3* a[p]
p - p + 1
r:entru i
lip = indicele elementului curent
Iim = nr de elemente din multime
+ 1
+ 1
Ilelementul a[p] a fost expandat
29.
[
a t timp x <>0 executa
n _ n + 1; a[n] - x mod 10;
x _ x div 10; Iiretin cifrele numarului x in vector
i - 2; x _ i;
183
184
II se interschimba elementul
II a [i] cu a [ i +a [i] ]
Iise continua parcurgerea
Ilverifica daca exista element
Iicu prima cifra egala cu i
div 10;
Ildetermin prima cifra a lui x
~ x
II perechea a[i),a[i+1] nu
II respecta monotonia ceruta
a[j] ~ a[j+1];
Iise verifica daca a[i+1]
Iirespecta momotonia cu a[i-1]
Iise sterge ali] daca a[i-1]<a[i+1]
n-1 executa a[j] ~ a[j+1];
Iise sterge a[i+1] daca a[i-1]>a[i+1]
~ i+1,
n executa scrie ali]
n executa
(i+a[i]) mod n;
a[y] ~ x;
n executa citeste ali]
~ 1, n executa citeste ali]
altfel i ~ i + 1;
n ~ n-l;
altfel
c:
e nt ru
j
n ~ n-1;
c:aca ok atunci scrie salt a linie noua;
pentru i ~ O, 9 executa
ok ~ false;
pentru j ~ 1, n executa
x ~ a[j]
c:at_timp x>9 executa x
~ a c a x=i atunci
Lmscrie a[j]; ok ~ true;
C
a t _ t i mp (a[i-1]<a[i])and(i<=n)executa
i ~ i+1; II caut pozitia in vector pana unde
II cifrele formeaza sir crescator
c:aca x = i atunci i ~ n+l;
C
a t _ t i mp (a[i]>a[i+1])and(i<n)executa
i ~ i+l; II se continua parcurgerea cat timp
II cifrele formeaza sir descrescator
~ a c a i = n atunci scrie 'DA'
Lmaltfel scrie 'NU'
c:entru i ~ 1,
[
e n t ru i ~ 1,
x ~ a[i]; Yr:
ali] ~ a[y];
c:entru i ~ 1,
i ~ 2;
cat_timp i<=n executa
aca (a[i]>a[i+1]) atunci
aca (a[i-1]<a[i+1])atunci
c:entru j ~ i, n-1 executa
32.
31.
36.
38.
i <- 1;
r
c a t _ t i mp i<n executa

a c a a[i]*a[i+1]<0 atunci //a[i] si a[i+1] au semne contrare


x-la[i]l;
y - la[i+1] 1;
rcat_timp y<>O executa / / se inmulteste x 10 (nr.cifre y)
4ix <- x*10; y - Y div 10;
rpentru j <- n, i+1, -1 executa a[j+1] <- a[j];
41 fise deplaseaza elemente cu 1 pozitie
a[i+1] <- x + la[i+1] I Iise insereaza valoarea ceruta
i <- i + 2;
l ; .':' i + " / t ee continua parcurgerea
citeste n, a[l]; nr <- 1; //a[i] este ultimul element dintr-un
r
p en t ru i <- 2, n executa //subsir cu elemente consecutive
citeste x; k <- 1; //caut subsirul unde poate fi asezat x
rcat
L. executa k <- k + 1;
C
a c a k=nr + 1 atunci //daca nu exista il plasez pe o noua
nr <- nr + 1 ; Ilpozitie in vectorul a
a[k] <- x;
//afisez nr de subsiruri cu elemente consecutive
i O, n-1 executa //r[i]=x codifica secventa
<-O; // a[l]+ .. +a[x] are restul mod n egal cu i
S <- O
[
p e n t ru i <- 1, n executa
s <- S + a[i]; //suma primelor i elemente

a c a s mod n = O atunci/Iare restul mod n=O => este solutie


p1 <- 1;
I I p2 <- i;
I Ialtfel i <- n r
lt
ac a r[s mod n]*O atunci //restul s mod n s-a mai obtinut
p1 <- r[s mod n] + 1; p2 <- i; i <- n;
altfel
r[s mod n] <- i; Iise retine indicele i
i <- p1, p2 executa scrie ari];
185
II relatia de recurenta
Ilinitializarea primilor termeni
186
O, n-l executa Ilr[i]=x codifica secventa
II a[l]+ .. +a[x] are restul mod n egal cu i
i <- pl, p2 executa scrie ari];
rpentru i
rei] <-O;
s <- O
f
p e n t ru i <- 1, n executa
s <- S + a[i]; Iisuma primelor i elemente

s mod n = O restul mod n=O => este solutie


pl <- 1; p2 <- l; l <- n;
altfel
lt
ac a r[s mod n]*O atunci Iirestul s mod n s-a mai obtinut
pl <- r[s mod n] + 1; p2 <- i; i <- n;
altfel
ris mod n] <- i; Iise retine indicele i
p <- 1; nn <- O; Iinumarul de nr negative
[
e n t ru i <- 1, n executa
r:aca a[i]<O atunci nn <- nn + 1;
rd
ac a
la[i] 1<la[p] I then p:=i; Ildetermin pozitia valorii
41 II minime in modul care va fi asezata pe pozitia n in A
Ila[n] va fi eliminat
x<-a[p];
a[p] <- a[n];
a[n] <- X;
r:aca x<o atunci nn <- nn - 1;
Ordonam primele n-l valori din vector
rdaca k mod 2 * nn mod 2 atunci k <- k - 1;
41 Iiconsider ca lui ain] i se schimba semnul
i <- 1, k executa ari] <- (-l)*a[i];
C
e n t ru i <-1, n-1 executa II calculeaza produsul, se afiseaza
p:=p*a[i]; scrie ari] II valorile cu semn schimbat
scrie p
alO] <- O; a[l] <- 1;
jPentru i <- 2, n executa
l. ari] <- i + ari div 2]
scrie a[n]
43.
40.
Sectiunea 2.2.2
Solutie test 1
#include <iostream.h>
int a[lO] [lO],i,j,n,x,m;
void main() {
cinnm;
for (i=Oii<nii++)
for (j=Oij<mij++)cina[i] [j];
for (i=Oii<nii++) {
x=O;
for (j=O;j<m;j++)
x+=a [ i] [j] %1Oi
coutXi
}
}
var
a:array[l .. 10,1 .. 10]of integeri
i,j,n,x,m :integer
begin
read(n,m)
for i :=1 to n do
for j:=l to m do read(a[i,j]);
for i,:=l to n do begin
X:=Oi
for j:=l to m do
inc(x,a[i,j]mod 10) i
write(x)
end end.",
a) 3 11;
b) Orice tablou bidimensonal pentru care sumele pe linii ale cifrelor un

c) Orice tablou bidimensonal cu elemente n 0...9;
d
Solutie test 2
a) 2;
b) Valoarea poate fi n. Orice tablou bidimensional ce o cu toate
elemente multipli de 3;
c) Tabloul nu nici un element divizibil cu 3;
d) variabila c va indicele coloanei ce a fi
de pe linia 16 devine:
rdaca x>max atunci
max c j i
e)
var
a:array[1 .. 10,l .. 10]of integeri
i,j,n,x,m,max :integer
begin
read(n,m) i max:=Oi
for i :=1 to n do
for j:=l to m do read(a[i,j])i
for j:=l to m do begin
X:=Oi
i:=l to n do
if a[i,j] mod 3=0 then inc(x) i
if x>max then maX:=Xi
endi
writeln(max)
end.
#include <iostream.h>
int a[10] [10],i,j,n,x,m,max;
void main() {
cinnmi
max=Oi
for (i=Oii<n;i++)
for (j=Oij<mij++)cina[i] [j] i
for (j=Oij<mij++) {
X=Oi
for (i=Oii<nii++)
if (a[i] [j]%3==0) X++i
if (x>max) maX=Xi
}
coutmaxendli
}
187
Solutie test 3
a) Vor fi pe linii valorile 1 2 3 4,1 2 3 4,1 234,1234;
b) Elementele n cadrul unei linii sunt egale cu liniei respective;
e) Se pot folosi indicii la liniarizarea matricii:
#include <iostream.h>
int a[lO] [lO],i,j,n,x,max,linie,
void main()
cinnm;
max=O;
linie=-l;
for (i=O;i<n;i++)
for (j=O;j<m;j++)cina[i] [j];
for (i=O;i<n;i++) {
x=O;
for (j=l;j<m;j++)
if (a[i] [j]==a[i] [O]) x++;
if (x>max) { max=x; linie=i;
}
coutlinie+1' 'max;
#include <iostream.h>
int a [10] [10] , i, j r n r
void main() {
cinn;
for
for (i=l;i<=n;i++) ari] [j]=j;
for (i=l;i<=n;i++) {
coutendl;
for (j=l;j<=n;j++)
couta[i] [j];
m;
}
}
188
a:array[l .. 10,1 .. 10]of byte;
i,j,n: byte;
:array[l .. 10,1.. 10]of integer;
i,j,n,x,max,linie,m:integer
read(n,m) ;
max:=O;
1inie:=0;
for i :=1 to n do
for j:=l to m do read(a[i,j]);
for i:=l to n do begin
x:=O;
for j:=2 to m do
if a[i,j]=a[i,l] then inc(x);
if x>max then begin
linie:=i;
readln (n) ;
for j:=l to n do
for i:=l to n do a[i,j] :=j;
for i:=l to n do begin
writeln;
for j:=l to n do write(a[i,j])
end
rpentru n executa
I rpentru executa
L a[i,j]
a) 3 2;
b) Valoarea a lui max poate fi m-1, n cazul n care o linie cu toate
elementele egale;
c) Orice tablou n care elementul de pe prima nu se mai n cadrul linie
sale;
e
Solutie test 4
Il+'flwxit:el.n(linie, ' ',max)
Solutie test 5
(i%2==0)
cinnm;
k=O;
for (i=O;i<n;i++) if
for (j=O;j<m;j++)
a [il [j] =++k;
else
for (j=m-l;j>=O;j--)
ari] [j]=++k;
for (i=O;i<n;i++) {
coutendl;
for (j=O;j<m;j++)
couta[i] [j];
byte; #include <iostream.h>
int i,n,m,j,k,a[10] [10];
void main() {
var a:array[1 .. 10,l .. 10]of
i,n,m,j,k:integer;
begin
readln(n,m); k:=O;
for i:=l to n do
if i mod 2=1 then
for j:=l to m do begin
inc(k); a[i,j] :=k;
end
else
for j:=m downto 1 do begin
inc(k);
a[i,j] :=k;
end';
for i:=l to n do begin
writeln; }
for j:=l to m do write(a[i,j]) }
end
end.
6
7
8
9
10
11
a) Elementele tabloului pe linii vor fi : 1 23, 65 4, 7 89, 12 Il 10;
b) Elementele se vor completa dar ncepnd cu valoarea n*m;
e)
1
2
Solutie test 6
a) 1 110
2200
3000
0000
b) Orice valori astfel nct m = Il + 1;
c) Notam cu x valoarea dintre n m, de elemente nule din tablou este
egal cu:
nr = x*(x+1)div 2 , Il <=m
nr = x*(x+l)div 2+abs(n-m) )*x , Il m
d)
1 var
2 a:array[l .. 100,1 .. 100]of byte;
3 i , j , n , m : integer
4 begin
5 read(n,m);
6 for i : =1 to n do
7 for j :=1 to m do a[i,j]:=i;
8 for i : =1 to n do
9 for j : =1 to i do
10 a[i,m-j+l] :=0 ;
11 for i :=1 to n do begin
12 writeln;
13 for j:=l to m do write(a[i,j])
14 end1
15 end.
#include <iostream.h>
int i,j,n,m, a[100] [100];
void main() {
cinnm;
for (i=l;i<=n;i++)
for (j=l;j<=m;j++) ari] [j]=i;
for (i=l;i<=n;i++)
for (j=l;j<=i;j++)
a [il [m-j+l] =0;
for (i=l;i<=n;i++) {
coutendl;
for (j=l;j<=m;j++)
couta[i] [j];
}
}
189
d)
d)
cinn;
p=l;
for (i=O;i<n;i++)
for (j=O;j<n;j++)cina[i] [j];
for (j=0;jn+1)/2;j++)
for (i=j;i<n-j;i++)
p*=a [il [j] ;
coutpendl;
}
190
b) n=2;
read(n) ;
p:=l;
for i :=1 to n do
for j:=l to n do read(a[i,j]);
for j :=1 to (n+1) div 2 do
for i :=j to n-j+1 do
p := p*a[i,j]
writeln(p)
#include <iostream.h>
:array[1. .100 11. .100] of integer; int a [100] [100] ,i, j ,n, p;
i,j,n,p :integer void main() {
var #include <iostream.h>
a:array[I .. 100,1 .. 100]of integer; int a[100] [100],i,j,n,s;
i,j,n,s :integer void main() {
begin cinn;
read(n) s=O;
s:=O ; for (i=O;i<n;i++)
for i :=1 to n do for (j=O;j<n;j++)cina[i] [j];
for j:=1 to n do read(a[i,j]); for (i=0;in+l)/2;i++)
for i :=1 to (n+1) div 2 do for (j=i;j<n-i;j++)
for j :=i to n-i+1 do s+=a[i] [j];
inc(s,a[i,j]); coutsendl;
writeln(s) }
end.
Solutie test 7
a) 15;
c) Pe liniile 9 10 devin:
[
e n t ru div 2, n executa
: n-i+l, i executa
Solutie test 9
a) 1440;
c) Pe liniile 9 10 devin:
[
e n t ru div 2, n executa
: n-j+1, j executa
Solutie test 8
a)
1 2 3 4
5 6 7 16
8 9 15 14
10 13 12 11
c) Pe linia 5, devine:
j 1, N - I executa.
d)
var
a:array[1 .. 100,1 .. 100]of integer;
i,j,n,m :integer
begin
read(n) ;
m:=O;
for i :=1 to n do
for j :=1 to n-i+1 do
begin
inc(m) ;
a[i,j] := m
end;
for { :=n downto 2 do
for j :=n downto n-i+2 do
begin
inc(m) ;
a[i,j] :=m
end ,,'
end.
#include <iostream.h>
int a[100] [100Li,j,n,m;
void main() {
cinn;
m=O;
for (i=l;i<=n;i++)
for (j=l;j<=n-i+l;j++)
ari] [j]=++m;
for (i=n;i>=2;i--)
for (j=n;j>=n-i+2;j--)
ari] [j]=++m;
Solutie test 10
a)
1234
2123
3212
4321
b) n=2;
c) Linia 5 devine: a [i, j] Ii-j 1 ;
var
a:array[l .. 100,1 .. 100]of integer;
i,j,n:integer
begin
read(n) ;
for i :=1 to n do
for j :=1 to n do
a[i,j] :=abs(i-j)+l
for i :=1 to n do begin
write1n;
for j :=1 to n do write(a[i,j])
end
end.
191
#include <iostream.h>
#include <math.h>
int a [10 O] [10 O] r i, j , n;
void main() {
cinn;
for (i=O;i<n;i++)
for (j=O;j<n;j++)
ari] [j]=abs(i-j)+l;
for (i=O;i<n;i++) {
for (j=O;j<n;j++)
couta [il [j] ;
coutendl;
}
}
2.2.4
Ilafisare punct sa"
II se verifica daca min este
II maxim pe coloana c
II se sterge linia 1 prin
II deplasare liniilor 2 .. n+l
fise retine coloana minimului
II determin minimul pe linia i
Iise identifica elementele a[i,j]
Ilptr care a[i,O]=a[O,j]
atunci scrie a[i,j]
fise copiaza linia 1 pe linia n+1
n executa II a[i,O] retine suma pe linia i
II a[O,i] retine suma pe coloana i
1, n executa
a[i,O] + a[i,j]
a[O,j] + a[i,j]
pentru i _ 1, n executa
min _ a[i,l]; ok _ true
[
e nt ru j _ 1, n executa
caca,a[i,j] ,<,min
mln - a[l,]]; c - ];
[
e nt ru 1 _ 1, n executa
C
a c a a[l,c] > min atunci
. o k _ False;
G:aca ok atunci scrie min
192
pentru j _ 1, n executa
x - a[l,j] II primul element dupa coloana j
[
en t ru i _ 2, n executa
y _ a[i,j]
rcat_timp y<>o executa II calcul c.m.m.d.c. prin Euclid
L. r - x mod y; x - y; y - r
scrie x Ilafisarea c.m.m.d.c pe coloana j
pentru i _ 1,
ari, O] _ O;
[
e n t ru j _
ari, O] -
a [O, j] _
[
e n t ru i _ 1, n executa
entru j - 1, n executa
[ G:"ca a[i,01 a[0,;1
rpentru j - 1, m executa
L.a[n+1,j] - a[l,j]
[
e n t ru i _ 1, n executa
rpentru j - 1, m executa
L. a[i,j] - a[i+1,j]
13.
12.
10.
7.
21.
24
nr <- O;
r
ent ru i <- 1,n executa
ok <- true II presupunem ca toate elementele sunt egale
r
pent ru j <- 1, m-1 executa
rdaca a[i,j] <> a[i,j+1] atunci
l
l. ok false II s-a identificat pereche de elemente
G:aca ok atunci nr <- nr + 1
t <- o;
pentru j <- m, 1,-1 executa
a[O,j] <- t; Iise aduna numerele dupa alg. aritmetic
rpentru i <- 1, n executa Ila[O,j] cifra ce apare pe
4.a[O,j] <- a[O,j] + a[i,j] II pozitia j in scrierea sumei
t <- a[O,j] div 10; Iit restul de transport la adunare
a[O,j] <- a[O,j] mod 10 Iicifra ramasa pe pozitia j
,,'
aCO,O] <- t; Ilultimul rest de transport
rpentru j <- O, m executa
4.scrie a[O,j], ','
1, n executa Iise ordoneaza elementele pe linii
<- 1, m-1 executa
k <- j + 1, m executa
a[i,j] > a[i,k] atunci a[i,j] <- a[i,k]
Pasul 2: Ordonare elemente tabloul pe coloane
30.

j
4. a[i,j]
m <- n-1;
1, n executa Iise sterg elementele pe diagonala
i, n-1 executa Ilprin deplasarea spre stanga o
<- a[i,j+1] II pozitie a urmatoarelor
Iitabloul are n linii m coloane
31.
[
ent ru i <- 1, n executa
rpentru j 1, m executa
4. a[i,j] <- i + j -1
193
194
Iise boordeaza matricea cu 1
1 ,p2, 1 " x2,' " y2) ;
s;
intreg a[100] [100], max, s, i, j, p, n, m, x, y, xi, yi;
Citirea datelor de intrare
entru i 1, n executa
pentru j 1, m executa
aca a[i,j]=O atunci Iise poate plasa regina in loc liber
x i; y j; s O;llinsumez elementele de pe diagonale
rcat_timp (x>O)and(y>O) executa
s+a[x,y]; x x - 1; Y Y - 1;
x i; y j; Iisunt 4 directii care descriu diagonalele
rcat_timp (x>O)and(y<m+1) executa
s + a[x,y]; x x - 1; Y Y + 1;
intreg a[100] [100],p,i,j,n,m,k,p1,p2;
citeste n,m; p1 O; p2 O;
Citirea elementelor matricii A
i O, n+1 executa
l. a[i,O] 1; a[i,m+1] 1;
i O, m+1 executa
l. a[O,i] 1; a[n+1,i] 1;
entru i 1, n executa Iise actualizeaza pas cu pas
pentru j 1, m executa IIva1ori1e lui p1 si p2
aca a[i-1,j]*a[i,j-1]*a[i+1,j]*a[i,j+1]>p1 atunci
p2 p1; x2 xl; y2 y1; xl i; y1 j;
pl a[i-1,j]*a[i,j-1]*a[i+1,j]*a[i,j+1];
altfel
rdaca p2<a[i-1,j]*a[i,j-1]*a[i+1,j]*a[i,j+1] atunci
a[i-1,j]*a[i,j-1]*a[i+1,j]*a[i,j+1]; i; j
intreg a[100] [100],s, i, j, p, n, m, x, y; caracter c;
Citirea datelor de intrare
a[x,y]; Iicalculez suma elementelor de pe traseu
entru i 1, P executa
citeste c; Ilindica directia deplasarii
e:aca c='N' atunci x x - 1;
e:aoa c='S' atunci x x + 1;
e:aca c='V' atunci y y - 1;
e:aca c='E' atunci y y + 1;
s s + a[x,y]; Ilelementul in care se ajunge este insumat
35.
38.
X-ii y-j;
rcat_timp (x<n+1)and(y>0) executa
- s + a(x,y]; x - x + 1; y - y - 1;
x - i; y - j;
rcat_timp (x<n+l)and(y<m+l) executa
_ s + a[x,y]; x _ x + 1; y - y + 1;
rdaca s>max atunci max - s; xi - i; yi j;
41 Iise actualizeaza nr. max de pioni atacati
max,' I ,xi, I ',yi
Sectiullea 2.4.2
1. Se produsul (mod 10) al tuturor factorilor primi, la puterile la care apar,
ignornd factorii de 5 un de factori de 2 egal cu factorilor de 5. Vezi
problema 4 2.4.1.
intreg n, i, n2, n5, u, nr;
citeste n; u li
pentru i-2, n executa
nr _ i;
[
a t timp nr mod 2=0 executa
nr - nr div 2;
n2 - n2 + 1;
[
a t timp nr mod 5=0 executa
nr - nr div 5;
n5 - n5 + 1;
u _ (u*(nr mod 10)) mod 10;
i-1, n2-n5 executa
G. u - mod 10;
scrie u;
stop.
2. Problema este se pot folosi vectori auxiliari fie cu elemente ntregi, fie cu
elemente de tip logic, ca indici pe cifre: A[O..9].
3. Se formula pentru p prim):
Se descompune n factori primi p, se formula pentru a determina cea
mai putere a unui factor prim al
195
196
4. Se parcurge matricea se de la presupunerea orice element de valoare k
unei piese valide. Se toate cele 8 ale piesei din punctul
curent considerat. simetriei)
5. Se limita a intervalelor. La parcurgerea intervalelor se
va actualiza cel mai mare din dreapta (maxdr). Orice interval pentru care din
dreapta este mai mic dect maxdr este redundant, deci inclus n altul.
+- r;
ri

p>l atunci
J Pi
I r Oi
[
a t timp executa
r r + n div j;
j j * p;
G:aca max<r atunci max
intreg n, p, r, max, i, j, nri
citeste n, Pi
max .... Oi
entru i .... executa
nr .... Oi
[
a t timp p mod i=O executa
nr nr + 1;
p pdivii

atunci
J .... li r .... O;
[
a t timp executa
r r + n div ji
j j * i; .
G:aca max<r atunci max .... ri
6. Pentru a evita implementarea pe numere cu n
vectori), se factorii primi pentru fiecare asociat unei parole; La final se
au vreun factor prim comun.
7. Algoritmul va face mai multe parcurgeri prin elementele matricei, pentru fiecare moment
identificndu-se de elemente care se vor topi . Pentru a nu de mai multe
ori o este indicat ca care se n aer la momentul curent fie
cu o valoare de exemplu.
8. Algoritmul are la principiul pentru cu 11 elemente, respectiv m
(n<m) sortate primul are k elemente negative p elemente pozitive
(k+p=n) se primele k elemente din primul cu primele k din al doilea ultimele
p elemente din primul cu ultimele p din al doilea
intreg n, ro, a[100], b[100], i, j, ri
daca n>ro atunci inverseaza a cu bi
sorteaza sirul a crescator;
sorteaza sirul b crescator;
r .- O; i .- O;
c;at timp (a[i+1]<0)and(i+1<=n) executa i - i + li
j.-1, i executa r .- r + a[j]*b[j];
j.-i+1, n executa r <- r + a[j]*b[rn-n+j]i
scrie ri
stop.
9. Algoritmul presupune identificarea de k ori a elementului a a vecinilor este
la pasul respectiv. Pentru evitarea unor suplimentare generate de
de vecini ai unui element, se poate linia coloana 0, respectiv n+1 cu valoarea O.
10. Problema cere o manipulare a structurilor de date, fiind preluarea
datelor ntr-un 'tablou unidimensional cu elemente de tip nregistrare. Algoritmul presupune
o de a unui element dintr-un de lungime
care poate fii liniar.
p[i] [1]=p[i-1] [1] )or(p[i] [1]+p[i-1] [1]=6) )and
(a[i-1] [l]=true) atunci
a li] [O] truei
t fi] [O] .- 1;
( (p [il [2] =p [i-1] [1] lor (p fi] [2] +p [i-1] [1] =6) ) and
(a[i-1] [l]=true) atunci
a li] [1] truei
t fi] [1] .- 1;
p[i] [2]=p[i-1] [2] )or(p[i] [2]+p[i-1] [2]=6) )and
(a[i-1] [O]=true) atunci
ari] [1] truei
tril [1] <- O;
11. Algoritmul are\,9complexitate presupune parcurgerea n a matricei.
12. Algoritmul o programare Se o matrice cu
coloane n care elementele sunt n {True, False} cu
A(i,O)= True, se poate un n i cu piesa i
A(i,l)= True se poate un n i cu piesa i
de se deduc imediat.
intreg n , i, j, p[100] [1. .2], t[100] [O 1] i logic a[100] [O.. 1] i
a[l] [O] .- truei a[l] [1] .- truei
pentru i.-2, n executa
[
c a p[i] [1]=p[i-1] [2] )or(p[i] [1]+p[i-1] [2]=6) )and
(a[i-1] [O]=true) atunci
a li] [O] ..- truei
t li] [O] <- O;
r
a
r
a
[ca
197
13. Algoritmul este o programare n care se de sume distincte
ale care se pot forma cu elementele date. Se va crea un vector S de lungime
N+1 n care elementul S(i)=True suma de valoare i se poate cu
elementele S(O)=True.
14. Se de numere super prime mai mici dect n, care se cu
ajutorul dinamice de Il cu minim de elemente.
Se vor crea doi vector S(O..n) T(l..n):
s(i)=} are suma i se poate cu minim} termeni
t(i)=k are suma de valoare i s-a cu ultimul termen
a(k).
198
atunci
nr[O] Oi
i+-1,n executa
L. nr [i ] +- 00;
entru i+-1,np executa
[
ent ru executa
[
ac a nr[j+p[i]]>nr[j]+l
nr[j+p[i]] nr[j]+l;
t[j+p[i]] p[i];
i _ ni
daca a[n] [O]=true atunci j O
altfel j 1;
[
at timp i>O executa
daca j=l atunci scrie p[i] [l],p[i] [2]
altfel scrie p[i] [2] ,p[i] [1];

i i - 1;
stop.
intreg n, i, j, k , np, p[1000], nr[0 .. 10000], t[0 ... 10000];
logic ok;
k +- Oi np O;
entru n executa
ok +- truei
executa
L. daca i mod j=O atunci ok false;
aca ok=true atunci
k +- k+li
ok +- truei
executa
L. daca k mod j=O atunci ok false;
[
aca ok=true atunci
np +- np + 1;
p[np] +- i;
[
a t timp n>O executa
scrie t [n];
n ... n - t[n];
stop.
15. Algoritmul are la o programare n care este matricea Bin.m).
Elementul b(i,j) va reprezenta maxim de mere care poate fi culese n
(i,}). Elementul b(l,]) va fi egal cu a(l,1);
Elementele primei linii se vor determina pe baza B( i,})=b( i,}-i)+ aii.j).
Elementele primei coloane se vor determina pe baza B(i,i )=b(i-l,i)+ ati.j).
de
b(i,})=max(b(i-l,j), b(i,}-])) + aCi,}).
16. Problema se reduce la de corecte pentru n perechi de paranteze,
cunoscut ca lui Catalan: (2n)! / (n!*n!*(n+1))
17. Se vor identifica valorile distincte din vectorul se poate
face chiar folosirea unei matrici de caractere.
18. Se algoritmul clasic pentru de lungime folosind doar
elementele care sunt numere prime.
;;1'
//sunt afisate in ordine inversa
I
laltfel nr[i] - O;
41
rez<nr[i] atunci
rez ... nr[i]; poz ... i;
scrie nr[poz];
[
at timp poz>O executa
scrie s[poz];
poz ... t[poz];
stop.
intreg n, i, j, rez, poz, s[2000], nr[2000], t[2000];
logic ok;
rez ... O; poz ... O;
pentru i ...l, n executa
ok ... true;
fPentru j ... executa
4. daca s[i] mod j=O atunci ok ... false;
aca ok=true atunci
nr[i] l;
t[i] O;
[
ent ru j-l,i-l executa
. [aca (nr [il <nr [j] +1) and (s [j] <s [i]) atunci
nr[i] _ nr[j]+l;
t [il ... j;
199
200
rez-1;
rez*rez;
n , m, i, j, t, a[200] [200], d[200] [200], rez;
...- O;
entru i...-1, n executa
pentru j...-1,m executa
r
a c a
ari] [j]=l atunci
d[i] [j] ...- 1;
t ...- 1+min(d[i-1] [j-1] ,d[i-1] [j+1] ,d[i-2] [j]);
ra
a c a
(a[i-1] [j]=l)and(d[i] [j]>t) atunci
lm d[i] [j] ...- t;
I
\ altfel
l. d[i] [j] ...- O;
ra
a c a
rez<d[i] [j] atunci
lm rez ...- d [i] [j] ;
intreg n, i, st, dr, mij, sl, s2, s3, a[32000], s[32000], d;
d+-
oo
;
i...-1, n executa
...- s[i-1]+a[i];
n , m, I . j, a[200] [200], rez;
rez ...- O;
entru i...-1, n executa
pentru j...-1,m executa
ra
a c a
ali] [j]=l atunci
lm a [i] [j] ...- min (a [i -1] [j] , a [ i] [j -1] , a [i -1] [j -1] ) +
1
;
ra
a c a
rez<a[i] [j] atunci
lm rez ...- a [i] [j] ;
21. Pentru fiecare valoarea a primei (fie aceasta Sj) se binar locul n care se
mparte S2 S3 in valori ct mai egale.
20. Vom nota cu D[i][j] = raza unui romb maxim cu jos n (i, j). Se deduce
de D[i][j] = l+min(D[i-l][j+1], D[i-l][j-l], D[i-2][jJ) care se
doar =A[i-IJlj] = 1.
19. Vom nota cu D[i][j] = latura unui de arie cu dreapta-jos n (i, j).
Se deduce de D[i][j] =I+mill(D[i-l][j],D[iJlj-l],D[i-l][j-l])
care se doar A[i] [j] =1.
entru n-1 executa
st i+1; dr n;
[
a t timp st<dr executa
mij (st+dr+1) div 2;
daca S[mij]-S[i]<S[n]-S[mij] atunci st mij
altfel dr mij-1;
sI SfiI;
s2 S[st] - S[i];
s3 S[n] - S[st];
raaca d>max(sl,s2,s3)-min(sl,s2,s3) atunci
d max(sl,s2,s3)-min(sl,s2,s3);
s2 S[st+1] - S[i];
s3 S[n] - S[st+1];
raaca d>max(sl,s2,s3)-min(sl,s2,s3) atunci
G. d max(sl,s2,s3)-min(sl,s2,s3);
22. Se apoi pentru fiecare valoare din a lui Sti} se binar valoarea
M-S[i} de cte ori
23. Oricare patru puncte un punct de deci rezultatul va fi de
N luate cte 4.
24. Se o matriceN*K cu A[i, j} = minim de zile necesare
pentru a avea i persoane in camera j perechi de persoane n zi.
doar A[N, K} Z. de va fi:
A[i, j} = min (A[i -x, j -x*(x-1)I2) + 1), x <= i.
Pentru a reconstitui se mai o matrice.
intreg d, n , z , k , i, j, 1, a[50] [1225], t[50] [1225];
d O;
[
ent ru n executa
k executa ari] [j]
alO] [O] O; a[l] [O] 1; t[l] [O] 1;
pentru n executa
pentru k executa
entru i executa
[
aca (j-1*(1-1) div
(a[i] [j]>a[i-1] [j-1*(1-1) div 2]+1) atunci
ari] [j] a[i-1] [j-1*(1-1) div 2]+1;
tril [j] 1;
raaca a[n] (k]>z atunci
scrie O;
201
202
altfel
[
a t timp n>O executa
i .- t[n] [k];
pentru j.-l,i executa scrie a[n] [k];
n t- TI - ii
k - k - i*(i-l) div 2;
scrie max{a[O],b[O]);
stop.
26. O proprietate n rezolvarea problemei este cele M
orice de lungime N cu valori O sau 1, orice de
numere. Fiind binare, se considera fiecare de la Ola 2
N

1
, se se
cele M
intreg n, m, i, j, a[100], b[100], bit[18]i
citeste m, ni
t:entru i.-1,m executa citeste a[i], b[i];
pentru i-O, 2
n_1
executa
t:entru j-O, n-1 executa bit[j+1] .- bitul j din numarul i;
[
e n t ru j_1, m executa
[
a c a bit[a[j]]>bit[b[j]] atunci
bit[a[j]] _ O;
bit [b [j]) _ 1;
[
e n t ru j_1, n-1 executa
[
a c a bit[j]>bit[j+1] atunci
scrie "NU";
stop.
25. Se construiesc doi vectori cu
Afi] = suma a unui cu elemente n primele i elemente, a folosi
elementul i;
= suma a unui cu elemente n primele i elemente, folosind
elementul i.
Se deduc de Afi] = max(Afi -l}, - 1J); = Afi -l}
+ Sfii. va fi max(AfN], BfN]).
intreg n, i, nr, a[O .. 1], b[O .. 1];
citeste n;
pentru i.-1,n executa
citeste nr;
a [ 1] - max (a [ O] , b [ O] ) ;
b[l] _ a[O]+nr;
a[O] .- a[l];
b[O] .- b[l];
27. Se un vector = minim de timbre necesare pentru a i
de este de dedus.
28. Fie phi(x) = de numere mai mici ca x care sunt prime cu x. va fi
1+2*(phi(2) + phi(3) + ... + phi(N)). Pentru a calcula phi(x) n mod eficient se poate folosi
proprietatea phi(p*q) = phi(p) *phi(q) cmmdcip, q) = 1.
29. Se se din 100 n 100, deci este de ajuns calcularea restului
lui N la 100 preprocesarea pentru valori de la Ola 99.
30. cu j] de de lungime i cuj maxime. Se deduce
de re j} = j} *(i-l) +A[i-l, j-l}.
31. Este de ajuns se verifice de lungime fix K. Se un vector Qcare
va indici din vector cu proprietatea Qfi} Q[i+l} ... AfQfiJ) A[Q[i+l}}
... Se parcurge iar cnd se ajunge la elementul de pe x se toate
elementele de la lui Q mai mari ca valoare din vector dect Afx} se x.
Daca elementul de la nceput este pe o mai dect x-K+1 (nu este n de
lungime K ce se n x) se cnd acesta va avea mai mare sau
cu x-K+1. Elementul de la nceput va fi baza de lungime K ce se n
elementul x. nu se fac mai mult de N N Qva mereu cel
mult N elemente distincte, complexitatea algoritmului fiind liniara in de N.
intreg n, k, i, st, dr, rez, paz, a[500000], q[500000];
citeste n, k;
executa
la. citeste a [i] ;
rez +- co;
st 1; dr O;
[
en t ru k-1 executa
cat timp executa dr dr-l;
dr dr+1;
q[dr] i;
pentru n executa
cat timp executa dr - dr-l;
dr dr+1;
q[dr] i;
cat timp executa st st+1;
[
a c a a[q[st]]>rez atunci
rez a[q[st]];
paz i;
paz-k+l, paz, rez;
32. Fie A matricea se o matrice i, j} = de scor
1 - 2 1 e cel ce ncepe din (i, j) cu jetonul). Cli. j} = j} -
maxi y}) x i Y j. Pentru a calcula eficient Cli, j} se mai o matrice i, j}
=maxt C]x, y)) 1 x i 1 j.
203
204
34. de lungime minim K care se cu elementul de pe i este fie
de pe i-l + elementul i sau elementele i-K+1, i-K+2... i (ultimele K).
Se poligonul va avea ca centru de greutate punctul xp + xp + 1 +...
+xk-l)/(k - p), (yp + yp + 1+... + yk -1)/(k - p), iar cel albastru xp + 1 + xp + 2 + ... +xk)
/Lk-p], (yp + 1 + yp + 2+... + yk)/(k-p, care coincid deoarece (xp, yp) =(xk, yk).
st, dr, rez;
intreg n, k, i, val, start, st, dr, rez, a[50000], s[50000];
citeste n, k;
[
e n t ru i_l,n executa
citeste ali];
s[i] _ s[i-l] + a[i];
rez - s[k];
st - 1;
dr - k :
val _ s[k];
start _ 1;
pentru i_k+l, n executa
val _ val+a[i];
(
a c a val<s[i]-s[i-k] atunci
val _ s[i]-s[i-k];
start'_ i-k+l;
[
a c a rez<val atunci
rez _ val;
st - start;
dr - i;
35. se pe proprietatea foarte n pe fiecare
linie un punct pe fiecare coloana un punct albastru. Presupunem o
cu puncte.
introducem un punct oarecare. Pe coloana punctului respectiv un
punct albastru (din proprietatea de mai sus). acel punct albastru n Pe linia
punctului albastru va exista un punct pe care l vom insera in Repetnd acest
procedeu vom ajunge la un moment dat la un punct care a mai fost n lista, deci la un ciclu
(acest lucru este evident deoarece punctelor este finit). Punctele de pe ciclu
vor reprezenta primul poligon, iar punctele albastre al doilea poligon.
Este evident vor avea de vrfuri, vom n continuare au
centru de greutate.
Fie primul punct (acela (xl, yl). Al doilea va fi (x2, yl), al treilea (x2, y2), al patrulea
(x3, y2) .. penultimul (xk, yk-l), ultimul (xk, yk) (care va coincide cu un alt punct (xp, yp), p
< k).
33. Se toate tripletele (i, j, k) cu i, j, k :s N se ntr-un vector
Afi} +A[jJ+A[k}. Se vectorul cu un algoritm eficient, iar pentru fiecare valoare din
vector x se binar valoarea S-x.
36. ca oricare trei puncte nu sunt coliniare mult rezolvarea. Din
un trapez are cel laturi paralele deci se poate construi
algoritm: se iau toate perechile de puncte - acestea cte un segment -
n de unghiul cu axa ax (panta dreptei). Pentru fiecare k segmente cu unghi
se pot forma k*(k-l)/2 trapeze.
Pentru a evita calculele cu reale (care pot cauza erori de precizie), se pantele ca perechi
de numere ntregi (Y, x), a efectua efectiv y/x. Pentru compararea a
astfel de perechi sunt necesare tipuri de date pe 64 de
37. Rezolvarea se pe programare Vom numi cele A B, de
lungime N, respectiv M vom construi matricea C{i][j] =lungimea celui mai lung
comun al A[Li] B[l ..j]. Acest lucru este o a
dinamice. Se va calcula o matrice Nr[i][j] = cte comune de lungime
pentru A[1..i] B[ l ..j] (evident modulo 666013). Se Nr[ i][j] doar
atunci cnd A[i] = B[j], astfel: pentru fiecare caracter c ntre 'a' 'z' se ultima sa
n A[l .. i-l] (fie aceasta ii) ultima sa n B[1 ..j-L] (fie
aceasta jj).
C{i][j] = C[iij[jj]+l se va aduna Nr[iij[jj] la Nr[ij[j] - aceasta
au lungime iar faptul ii jj ultima a
caracterului nu se vor identice. Pentru a rezultatul
final se toate valorile Nr[i][j] calculate, cu
x y astfel nct A[x] = A[i] = B[y] = B[j], se Nr[i][j] doar x < i y < j
(pentru a asigura ca nu se identice de mai multe ori).
38. va fi al K+l-Iea prim ridicat la Se ciurul lui
Eratostene.
executa
j - i*i;
[
a t timp
a[j] - truei
j - j + 2*i;
i i + 2;
intreg n, k, i, j; logic a[2000000];
citeste k;
pentru 1000000 executa a[2*i] - true;
i _ 3;
cat timp executa
aca a[i]=false atunci
k - k-l;
[
a c a k=O atunci
scrie i*i;
stop.
39. Un xxx(b) scris in baza 10 este nr=x*b
2+x*b+x.
Din rezolvarea in i de
gradul 2, nr ::: N se deduce baza n care pot fi scrise numerele Apoi se
toate numerele de forma scrise n toate bazele mai mici sau egale ca limita

205
41. Se vectorul sumelor S[iJ=A[1]+A[2J+...A[iJ se Apoi
se iau elementele adiacente din vectorul sortat se
42. Se ncepe cu primul pitic: acesta este a Osau negru altfel. Se parcurg
apoi piticii se pentru fiecare este sau negru.
executa
executa
start, rezi
206
intreg n, i, st, dr; rez, start; sir s;
citeste n, s;
rezi-O;

i .... 1, n executa
st J.;
dr i;
[
a t eimp
st st-1;
dr dr+1; .
[
a c a rez<dr-st+l atunci
rez .- dr-st+1;
start .- sti
st.-i;
dr.-i+1;
[
a t timp
st .... st-1;
dr .- dr+l;
[
a c a rez<dr-st+l atunci
rez .... dr-st+l;
start .... sti
intreg n , i, j, t , rez, a[lOO], s[O .. 100];
citeste n;
[
en t ru i ....1,n executa
citeste ali];
sti] .... s[i-l] + a ILl .
sorteaza vectorul s crescator;
rez.- \s[1] l :
[
en t ru i.-1, n-l executa
rez>ls[i+l]-s[i] I atunci
l. rez .- Is u-n -s li] 1;
scrie reZi
stop.
40. Se mijlocul se de la mijloc spre stnga spre dreapta,
comparnd elementele simetrice. Se ambele lungime sau
intreg n, i, r, poz, val, nr[20000];
citeste n;
[
e n t ru n executa
citeste poz, val;
nr[poz] vaIi
r Oi
pentru n executa
[
a c a nr[i]=r atunci
scrie 'R';
r r+Ii
raltfel
le. scrie 'N';
43. Se cele 3 se toate cele 3
3
de a aduna
fiecare tip de n primele 3 cutii ca
44. Se punctele x, iar la x egal y. Se parcurg
punctele la fiecare pas se y-ul maxim ntlnit, astfel se punctul curent
este dominant sau nu.
intreg n, il j, t, maxy, nr, x[lOOOO], y[lOOOO];
citeste n;
rpentru n executa
le. citeste xli], y[i];
sorteaza punctele descrescator dupa x, iar la x egal
descrescator dupa y
nr Oi maxy
[
e n t ru n executa
[
a c a y[i]>max atunci
nr n r-r l.:
maxy y[i] i
scrie nr;
stop.
45. Se un vector ok[i] = se poate suma i cu elementele din vector,
cu i ntre -10000 10000. Se apoi o valoare pentru care ok[i] este True, iar
ntre i suma elementelor-i este de sunt de
dedus.
intreg n, s, i, j, rez, a[lOO]; logic ok[-IOOOO .. 10000];
citeste n;
[
e n t ru n executa
citeste ali];

ok[a[l]] truei
207
46. Cnd una din laturi e un impar se poate parcurge ntreaga n zigzag. Cnd
ambele laturi sunt pare, se tabla ca una de (1, 1) este alb) se alege
minimul dintre negre. Acela va fi ocolit, n rest se va trece prin toate
Tiparul executat la S.c. LUMINA TIPO s.r.l.
str. Luigi Galvani nr. 20 bis, sect. 2,
teI./fax 211.32.60; tel. 212.29.27
E-mail: office@luminatipo.com
www.luminatipo.com
pentru i-2, n exeouta
[
oa a[i]<O atunoi
C
e n t ru j--10000, 10000 exeouta
daoa atunci ok[j+a[i]]-true;
[
c a a[i]>O atunoi
C
e nt ru j_10000, -10000 executa
daca atunci ok[j+a[i]]-true;
atunci rez - 12*i-sl;
rez .- 00;
C
e n t ru i-O, s e'tecuta
daca (ok[i])and(rez>12*i-sl)
scrie rez;
stop.