Pregătire cu un profesor

Glisează →

Subiect și barem

PDF

Se deschide documentul PDF… Deschide PDF

Acest subiect nu are un barem public asociat.

Model de pregătire · Informatică · 2026

Facultatea de Matematică și Informatică · UBB

Înapoi la arhivă

Despre acest subiect

pregătire · Culegere cu aproximativ 900 de probleme și 10 teste de antrenament

Sursa documentelor: FMI UBB – subiecte din anii precedenți. Pentru acest subiect nu este disponibil un barem public.

Subiectul în format text

Text extras automat din documentul original. Pentru formule, tabele, imagini și așezarea răspunsurilor, verifică întotdeauna PDF-ul.

Subiect · 674 pagini

Mai jos sunt primele 100 pagini din 674. Documentul integral rămâne disponibil în PDF.

Unele pagini conțin imagini sau text care nu poate fi extras complet. Consultă originalul pentru acele pagini.

Subiect · pagina 1

Admiterea la Facultatea de Matematic˘a s, i Informatic˘a
Universitatea Babes, -Bolyai Cluj-Napoca
Probleme s, i teste
preg˘atitoare
Informatic˘a

Subiect · pagina 2

Probleme s, i Teste Gril˘a de Informatic˘a pentru
Admiterea la Facultatea de Matematic˘a s, i Informatic˘a
Universitatea Babes, -Bolyai
2026
Coordonatori – autori:
drd. prof. Ioan Daniel Pop
stud. Rares, Cotoi stud. Cristian Cret, u
Autori:
stud. Mircea M˘aierean stud. Mara Ielciu
stud. Luca Cret, u stud. Mihai Gheorghes, mast. Paul Somes, an
stud. Luca Tudor stud. Paul Dobrescu
Contribuitori:
prof. univ. dr. Dios, an Laura
prof. univ. dr. Pop Horia
conf. univ. dr. S, erban Camelia
lect. dr. Andor Camelia
lect. dr. C˘alin Alina
lect. dr. Chis˘alit¸˘a-Cret¸u Camelia
lect. dr. Cioban Vasile
lect. dr. Ionescu Clara
lect. dr. Lups, a Dana
lect. dr. Mures, an Horea
lect. dr. Dragos, Radu
drd. Berciu Liviu
drd. Ciprian-Viorel Stupinean
drd. Dicu M˘ad˘alina
drd. Ion Iulia
drd. M˘adut, a Adrian-Pavel
drd. Manole Alexandru
drd. V˘aran Andrei
prog. Dragomir Manuel
prog. Sarkozi Melisa Alexandra
prog. Zoltan R˘azvan
stud. Danis, C˘at˘alin
stud. Deaconu Mihai
stud. Ceangˆar Alexandru
stud. Gas, par Daria

Subiect · pagina 3

Prefat, ˘a
Aceast˘a carte se adreseaz˘a elevilor de liceu care doresc s˘a ˆıs, i aprofundeze cunos, tint, ele
de Informatic˘a s, i s˘a se preg˘ateasc˘a ˆın mod eficient pentru examenul de admitere la Fa-
cultatea de Matematic˘a s, i Informatic˘a a Universit˘at, ii Babes, -Bolyai din Cluj-Napoca, la
disciplina Informatic˘a.
Fiecare capitol din programa oficial˘a a examenului de Admitere este aprofundat ˆın
dou˘a p˘art, i: ˆIn prima parte sunt prezentate toate conceptele teoretice aferente capitolu-
lui, al˘aturi de exemple concrete s, i elemente grafice explicative, iar a doua parte cont, ine
probleme de antrenament specifice capitolului, dup˘a modelul problemelor prezente la exa-
men. Mai apoi, sunt prezentate problemele de la toate sesiunile de admitere s, i de la toate
edit, iile concursului Mate-Info UBB dintre anii 2021 s, i 2024, al˘aturi de solut, iile aferente.
Ultima parte a c˘art, ii cont, ine 10 teste de antrenament a cˆate 24 de probleme gril˘a, res-
pectˆand cu exactitate modelul subiectelor de la examen. Toate aceste probleme cont, in,
de asemenea, rezolv˘ari s, i explicat, ii, la finalul c˘art, ii.
Init, iativa s, i efortul principal de realizare a acestei c˘art, i se datoreaz˘a urm˘atorilor
student, i: Rares, -Andrei Cotoi, Cristian-Emanuel Cret, u, Mircea M˘aierean, Mara Ielciu,
Tudor-Luca Cret, u, Mihai Gheorghes, , Luca Tudor, Paul Dobrescu s, i Paul Somes, an. Aces, tia
au propus probleme, au redactat solut, ii s, i au editat materialul sub coordonarea drd. prof.
preuniv. Ioan Daniel Pop, cu sprijinul departamentului de Informatic˘a s, i al comisiei de
admitere nivel licent, ˘a, coordonat˘a de conf. univ. dr. Dan Mircea Suciu (prodecan). Le
mult, umim tuturor cadrelor didactice s, i student, ilor care au contribuit la realizarea ma-
terialului prin propunerea de probleme, redactarea de solut, ii s, i realizarea de corecturi.
Adres˘am mult, umiri speciale pentru ajutorul acordat lect. dr. Clara Ionescu, conf. dr.
Camelia S, erban s, i conf. dr. Marcel S, erban (decan).
ˆIi rug˘am pe cei care observ˘a erori (care aproape sigur s-au strecurat, ˆın ciuda eforturilor
noastre) sau au sugestii de ˆımbun˘at˘at, ire s˘a ˆıi contacteze pe coordonatorii culegerii.
De asemenea, le ur˘am mult succes elevilor ˆın preg˘atirea lor pentru examenul de ad-
mitere s, i sper˘am s˘a-i ˆıntˆalnim pe mult, i dintre ei ˆın s˘alile Facult˘at, ii de Matematic˘a s, i
Informatic˘a.
Cluj-Napoca, februarie 2025 Coordonatorii

Subiect · pagina 4

Precizare: Problemele din subiectele de la concursurile Mate-Info sau examenele de
Admitere nu se vor reg˘asi printre problemele din aceast˘a carte. Culegerea are ca scop
preg˘atirea s, i ˆınt, elegerea tipurilor de probleme abordate. Problemele propuse ˆın subiecte
la urm˘atoarele edit, ii de concurs/examen vor fi complet noi.
Not˘a important˘a
ˆIn lipsa altor preciz˘ari:
• Toate operat, iile aritmetice se efectueaz˘a pe tipuri de date nelimitate (nu exist˘a
overflow / underflow).
• Numerotarea indicilor tuturor vectorilor, matricelor s, i s, irurilor de caractere ˆıncepe
de la 1.
• Toate restrict, iile se refer˘a la valorile parametrilor actuali ˆın momentul apelului
init, ial.
• O subsecvent, ˘a a unui vector este format˘a din elemente care ocup˘a pozit, ii consecu-
tive ˆın vector.
• Un subs, ir al unui vector/s, ir este format din elemente situate nu neap˘arat pe pozit, ii
consecutive ˆın vectorul/s, irul respectiv, ˆın ordinea ˆın care acestea apar ˆın s, irul dat.
• Dac˘a pe un acelas, i rˆand apar mai multe instruct, iuni de atribuire consecutive,
acestea sunt delimitate prin ”; ”.

Subiect · pagina 5

Cuprins
I Teorie s, i probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1 Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Tipuri de date. Operatori. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Tipuri structurate de date . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4 Algoritmi elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Complexitatea algoritmilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6 Subprograme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7 Recursivitate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8 Metodele Backtracking, Divide et Impera s, i Greedy . . . . . . . . . . . 114
9 Combinatoric˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
10 Grafuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
II Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
11 Admitere 2021 - 2025 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
12 Concurs 2021 - 2025 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13 Antrenament . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
III R˘aspunsuri s, i indicat, ii . . . . . . . . . . . . . . . . . . . . . . . . . . 490
14 R˘aspunsuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
15 Rezolv˘ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
16 Propun˘atori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
17 Erat˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668

Subiect · pagina 6

Partea
I
Teorie s, i probleme

Subiect · pagina 7

1
Algoritmi
Acest capitol acoper˘a
• Not¸iunea de algoritm
• Date, variabile, expresii, operat¸ii
• Structuri de baz˘a (liniar˘a, alternativ˘a ¸si repetitiv˘a)
1.1 Teorie
1.1.1 Introducere
Un algoritm reprezint˘a un set finit de pas, i bine definit, i, care descriu o secvent, ˘a logic˘a
de act, iuni necesare pentru a rezolva o problem˘a sau pentru a obt, ine un rezultat specific.
Acesta poate fi implementat ca:
• Algoritm principal: cont, ine logica principal˘a a programului s, i poate include
operat, ii de citire/scriere
• Procedur˘a (subalgoritm): o secvent, ˘a de instruct, iuni care efectueaz˘a o sarcin˘a
specific˘a, comunic˘a doar prin parametri s, i nu returneaz˘a valori
• Funct, ie (subalgoritm): similar cu procedura, dar returneaz˘a ˆıntotdeauna o va-
loare s, i nu ar trebui s˘a aib˘a efecte laterale (precum citire/scriere)
Not˘a: Subalgoritmii (proceduri s, i funct, ii) nu ar trebui s˘a efectueze operat, ii de citire
sau scriere direct. Acestea ar trebui realizate ˆın algoritmul principal sau ˆın subalgoritmi
special dedicat, i pentru operat, ii I/O. Comunicarea ˆıntre subalgoritmi se face exclusiv prin
parametri (pentru proceduri) s, i prin valoarea returnat˘a (pentru funct, ii).
Datele sunt informat, iile procesate de c˘atre un algoritm s, i pot fi de diferite tipuri, precum
numerice, logice, textuale, etc. O variabil˘a este un spat, iu de memorie care poate stoca
o valoare ce poate fi modificat˘a pe parcursul execut, iei unui algoritm. Fiecare variabil˘a
este identificat˘a printr-un nume s, i are un tip de date asociat. O operat, ie este compus˘a
din operanzi s, i un operator. Operanzii reprezint˘a datele asupra c˘arora se aplic˘a operat, ia,
iar operatorul este simbolul care indic˘a tipul de operat, ie efectuat˘a asupra acestora. ˆIn
funct, ie de scopul acestora, operat, iile pot fi clasificate ˆın aritmetice, logice sau relat, ionale.
Operanzii pot fi constante, variabile, literali, rezultatele unor funct, ii, rezultatele altor
operat, ii. O expresie este o operat, ie care are ca operanzi alte operat, ii.
Interact, iunea cu utilizatorul sau cu fis, ierele externe se face prin instruct, iuni de intrare
(citire) s, i ies, ire (scriere). Aceste operat, ii asigur˘a comunicarea dintre program s, i mediul
ˆınconjur˘ator. ˆIn cele ce urmeaz˘a, vom utiliza instruct, iunile Write s, i Return pentru a
evident, ia valorile afis, ate sau returnate de algoritmul respectiv.

Subiect · pagina 8

Algoritmi Teorie
1.1.2 Structuri de baz˘a
• Structura liniar˘a: expresiile care sunt evaluate secvent, ial pe o singur˘a linie de
cod, precum declar˘ari, atribuiri s, i operat, ii similare.
Structura liniar˘a
a ← 3
b ← 5
Write a + b ▷ se afis, eaz˘a 8
• Structura alternativ˘a (condit, ional˘a): permite luarea unei decizii prin executa-
rea unei ramuri de cod, ˆın funct, ie de ˆındeplinirea unei condit, ii.
Structura condit, ional˘a If
1: If n MOD 2 = 0 then
2: Write ”par”
3: Else
4: Write ”impar”
5: EndIf ▷ se afies, az˘a ”par” dac˘a n este par sau ”impar” altfel
• Structura repetitiv˘a: execut˘a un set de instruct, iuni de mai multe ori, de obicei
ˆın funct, ie de o condit, ie specific˘a.
Exemplu: Structura repetitiv˘a cu test init, ial For
1: For i ← 0, 9 execute
2: Write i, ’ ’
3: EndFor ▷ se afis, eaz˘a toate cifrele separate de un spat, iu
Exemplu: Structura repetitiv˘a cu test init, ial While
1: i ← 0
2: While i ≤ 9 execute
3: Write i, ’ ’
4: i ← i + 1
5: EndWhile ▷ se afis, eaz˘a toate cifrele separate de un spat, iu
Exemplu: Structura repetitiv˘a cu test final Do...While
1: i ← 0
2: Do
3: Write i, ’ ’
4: i ← i + 1
5: While i ≤ 9 ▷ se afis, eaz˘a toate cifrele separate de un spat, iu
3

Subiect · pagina 9

Algoritmi Probleme
1.2 Probleme
1. ✓ ?Fie algoritmul ceFace(a, b), unde a s, i b sunt numere ˆıntregi:
Algorithm ceFace(a, b)
a ← a DIV b
b ← a * b
a ← b DIV a
Write a, ’ ’, b
EndAlgorithm
Precizat, i valorile init, iale ale lui a s, i b astfel
ˆıncˆat algoritmul s˘a afis, eze 10 20.
A. a = 18, b = 20
B. a = 28, b = 10
C. a = 20, b = 10
D. a = 10, b = 20
2. ✓ ?Fie a s, i b dou˘a numere ˆıntregi (−104 ≤ a, b ≤ 104). Precizat, i care dintre urm˘atorii
algoritmi realizeaz˘a corect interschimbarea valorilor a s, i b s, i afis, eaz˘a valorile acestora
interschimbate. De exemplu: Pentru a = 12 s, i b = 6, algoritmul ar trebui s˘a afis, eze
6 12.
A.
Algorithm swap1(a, b)
a ← b + a
b ← a − b
a ← b − a
Write a, ’ ’, b
EndAlgorithm
B.
Algorithm swap2(a, b)
a ← a * b
b ← a DIV b
a ← a DIV b
Write a, ’ ’, b
EndAlgorithm
C.
Algorithm swap3(a, b)
a ← a DIV b
b ← a * b
a ← b DIV a
Write a, ’ ’, b
EndAlgorithm
D.
Algorithm swap4(a, b)
a ← a − b
b ← a − b
a ← b + a
Write a, ’ ’, b
EndAlgorithm
3. ✓ ?Fie algoritmul pink(a, b, k), unde a, b, k sunt numere naturale (1 ≤ a, b, k ≤ 104).
Algorithm pink(a, b, k)
If a > b then
a ← a ˆ b
b ← a ˆ b
a ← a ˆ b
EndIf
While a ≤ b execute
a ← a + k
b ← b − k
Write a, ’ ’
EndWhile
EndAlgorithm
Operatorulˆeste operatorul XOR pe bit, i;
tabelul de adev˘ar este urm˘atorul:
ˆ 0 1
0 0 1
1 1 0
Exemplu: 3ˆ5 convertit ˆın binar este
011ˆ101 = 110 = 6, iar 1ˆ4 convertit ˆın
binar este 001ˆ100 = 101 = 5.
Care dintre urm˘atoarele afirmat, ii de mai jos nu sunt adev˘arate?
4

Subiect · pagina 10

Algoritmi Probleme
A. Num˘arul de valori afis, ate de algoritm este egal cu (b − a) DIV (k · 2) + 1, b > a.
B. Pentru a = 12, b = 100 s, i k = 4, algoritmul afis, eaz˘a 11 valori.
C. Pentru a = 70, b = 20 s, i k = 6, algoritmul afis, eaz˘a 26 32 38 44 50.
D. Algoritmul afis, eaz˘a ˆıntotdeauna valori din intervalul [a,  a+b
2
], multiple de k.
4. ✓ ?Fie algoritmii good(a, b) s, i bad(a, b), unde a s, i b sunt numere ˆıntregi (−104 ≤
a, b ≤ 104).
Algorithm good(a, b)
a ← a * b
b ← a DIV b
a ← a DIV b
Write a, ’ ’, b
EndAlgorithm
Algorithm bad(a, b)
a ← a − b
a ← b − a
Write a, ’ ’, b
EndAlgorithm
Aleget, i variantele care completeaz˘a corect spat, iul subliniat de mai sus astfel ˆıncˆat cei
doi algoritmi s˘a afis, eze mereu aceleas, i valori pentru a s, i b, indiferent de valorile init, iale
ale acestora.
A. b ← a + b
B. b ← a − b
C. b ← b − a
D. b ← a * b DIV a + a
5. ✓ ?Fie algoritmul container(n), unde n este un num˘ar natural (1 ≤ n ≤ 104).
Algorithm container(n)
a ← 0
b ← 1
While n > 1 execute
a ← a + 1
b ← b ∗ 2
n ← n − b
EndWhile
Return a
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii de mai jos
sunt adev˘arate?
A. Pentru n = 1024, algoritmul retur-
neaz˘a 9.
B. Pentru n = 336, algoritmul returneaz˘a
8.
C. Algoritmul returneaz˘a ˆıntotdeauna o
putere a lui 2.
D. Algoritmul container(n) returneaz˘a
cel mai mare num˘ar k, cu proprietatea
c˘a num˘arul 2k este mai mic sau egal
decˆat n.
6. ✓ ?Fie expresia E = n DIV 100 + n MOD 100 DIV 10 + n MOD 10, unde n este un num˘ar
natural nenul (1 ≤ n < 103). Precizat, i pentru cˆate valori ale lui n, care respect˘a
specificat, iile din enunt, , expresia E are valoarea 9.
A. 9 B. 10 C. 45 D. 55
5

Subiect · pagina 11

2
Tipuri de date. Operatori.
Acest capitol acoper˘a
• Care sunt principalele tipuri de date s, i cum se reprezint˘a?
• Care sunt tipurile de operatori s, i cum sunt aces, tia utilizat, i?
2.1 Teorie
2.1.1 Not, iunea de tip de date
Tipul de dat˘a defines, te domeniul de valori pe care le poate lua o variabil˘a s, i operat, iile
permise asupra acesteia. ˆIn limbajele de programare, tipurile de date pot fi: numerice
ˆıntregi, numerice cu virgul˘a mobil˘a (detaliat mai jos), caracter, logice sau structurate
(tablou, structur˘a).
2.1.2 Definirea tipurilor de date
Tipurile de date fundamentale pot fi descrise, din punct de vedere numeric, prin intervale
ce deriv˘a din num˘arul de bit, i alocat, i fiec˘arui tip. De obicei, un tip de date reprezentat pe
n bit, i (cu semn, folosind complementul lui 2 - se va detalia ˆın cadrul materiei Arhitectura
Sistemelor de Calcul) poate reprezenta valori ˆın intervalul [−2n−1, 2n−1 − 1], iar acelas, i
tip, f˘ar˘a semn, poate reprezenta valori ˆın [0, 2n − 1]. Totus, i, pentru tipurile uzuale de
date avem:
• char (8 bit, i):
– signed char: [−27, 27 − 1];
– unsigned char: [0, 28 − 1].
• short (16 bit, i):
– short: [−215, 215 − 1];
– unsigned short: [0, 216 − 1].
• int (Minim 16 bit, i, dar poate fi s, i mai mult, ˆın funct, ie de limbaj):
– int: Minim [−215, 215 − 1];
– unsigned int: Minim [0, 216 − 1].
• long (Minim 32 bit, i, dar poate fi s, i mai mult, ˆın funct, ie de limbaj):
– long: Minim [−231, 231 − 1];
– unsigned long: Minim [0, 232 − 1].
• long long (Minim 64 bit, i, dar poate fi s, i mai mult, ˆın funct, ie de limbaj):
– long: Minim [−263, 263 − 1];

Subiect · pagina 12

Tipuri de date. Operatori. Teorie
– unsigned long: Minim [0, 264 − 1].
• float s, i double: Acestea reprezint˘a numere reale ˆın format cu virgul˘a mobil˘a, codi-
ficate conform standardului IEEE 754. Intervalele nu se exprim˘a simplu sub form˘a
de puteri ale lui 2 pentru ˆıntregul domeniu numeric, deoarece reprezint˘a numere ˆın
form˘a normalizat˘a (se va detalia ˆın cadrul materiei Logic˘a computat, ional˘a). Totus, i,
precizia lor ˆın bit, i este:
– float: 32 bit, i (aprox. 24 bit, i pentru mantis˘a);
– double: 64 bit, i (aprox. 53 bit, i pentru mantis˘a).
2.1.3 Operatori
Operatorii sunt de 3 tipuri: aritmetici, logici s, i relat, ionali. Cei pe care noi ˆıi vom folosi
ˆın cele ce urmeaz˘a sunt:
• Operatori aritmetici: +, -, *, /, %;
• Operatori logici: AND, OR, NOT;
• Operatori relat, ionali: <, >, ≤, ≥, =,̸ =
Operatorii aritmetici sunt evaluat, i conform regulilor standard de prioritate:
• Operatorii *, / s, i % au prioritate mai mare decˆat + s, i -;
• Expresiile grupate prin paranteze au prioritate ˆın timpul evalu˘arii unei expresii;
• Pentru operatorii de aceeas, i prioritate se aplic˘a evaluarea de la stˆanga la dreapta.
Operatorii logici opereaz˘a pe valori de adev˘ar (True sau False) s, i se evalueaz˘a dup˘a
urm˘atoarele principii:
• AND: Returneaz˘a True doar dac˘a ambii operanzi sunt True;
• OR: Returneaz˘a True dac˘a cel put, in unul dintre operanzi este True;
• NOT: Inverseaz˘a valoarea operandului (adic˘a, NOT False = True s, i NOT True =
False).
A B A AND B A OR B
False False False False
False True False True
True False False True
True True True True
Tabela 2.1 Tabela de adev˘ar pentru operatorii logici AND s, i OR.
Operatorii relat, ionali compar˘a dou˘a valori s, i returneaz˘a un rezultat boolean, dup˘a cum
urmeaz˘a:
• <: Verific˘a dac˘a valoarea din stˆanga este mai mic˘a decˆat cea din dreapta.
• >: Verific˘a dac˘a valoarea din stˆanga este mai mare decˆat cea din dreapta.
7

Subiect · pagina 13

Tipuri de date. Operatori. Probleme
• ≤: Verific˘a dac˘a valoarea din stˆanga este mai mic˘a sau egal˘a cu cea din dreapta.
• ≥: Verific˘a dac˘a valoarea din stˆanga este mai mare sau egal˘a cu cea din dreapta.
• =: Verific˘a egalitatea dintre cele dou˘a valori.
•̸ =: Verific˘a inegalitatea dintre cele dou˘a valori.
Evaluarea expresiilor relat, ionale se efectueaz˘a dup˘a evaluarea expresiilor aritmetice, res-
pectˆand regulile standard de comparare.
2.2 Probleme
7. ✓ ?Fie variabila n care memoreaz˘a un num˘ar natural. Care dintre expresiile de mai jos
are valoarea True dac˘a s, i numai dac˘a n este divizibil cu 5 s, i cu 9?
A. (n MOD 5̸ = 1) AND (n MOD 9 = 0)
B. ((n DIV 10) MOD 5̸ = 1) AND (n DIV 9 = 0)
C. (n MOD 5̸ = 1) OR (n MOD 9 = 0)
D. (n MOD 5 = 0) AND (n MOD 9 = 0)
8. ✓ ?Fie variabila y care memoreaz˘a un num˘ar natural. Care dintre expresiile de mai jos
are valoarea True dac˘a s, i numai dac˘a y este mai mare decˆat 10 s, i nu este divizibil cu
4?
A. (y > 10) AND (y MOD 4̸ = 0)
B. (y > 10) OR (y MOD 4 = 0)
C. NOT(y ≤ 10) AND (y MOD 4 = 0)
D. (y > 10) AND (y MOD 2̸ = 0)
9. ✓ ?Fie variabila k care memoreaz˘a un num˘ar natural. Care dintre expresiile de mai jos
are valoarea True dac˘a s, i numai dac˘a k este un num˘ar par mai mic decˆat 20?
A. (k MOD 2 = 0) AND (k < 20)
B. (k MOD 2̸ = 0) AND (k ≥ 20)
C. (k MOD 2 = 0) OR (k ≥ 20)
D. (k MOD 2 = 0) AND (k ≤ 20)
10. ✓ ?Fie variabila m care memoreaz˘a un num˘ar ˆıntreg. Care dintre expresiile de mai jos
este True dac˘a s, i numai dac˘a m este un num˘ar negativ divizibil cu 8?
A. (m > 0) AND (m MOD 8̸ = 0)
B. (m < 0) OR (m MOD 8̸ = 0)
C. (m < 0) AND (m MOD 8 = 0)
D. (m MOD 8 = 0) AND (m > 0)
11. ✓ ?Fie variabilele a = 16, b = 4 ¸si c = 2. Ce valoare va avea expresia urm˘atoare?
(a MOD b + b ∗ c) DIV (a DIV b − c) +

(a + 1) MOD (b − 1)

8

Subiect · pagina 14

Tipuri de date. Operatori. Probleme
A. 4 B. 5 C. 6 D. 7
12. ✓ ?Fie variabilele x = 20, y = 7 ¸si z = 3. Ce valoare va avea expresia urm˘atoare?

(x + 1) MOD y + z

∗

(x − 1) DIV z

−

y MOD (z − 1)

A. 18 B. 17 C. 21 D. 23
13. ✓ ?Fie variabilele a = 10, b = 5 ¸si c = 8. Ce valoare va avea a dup˘a executarea
urm˘atoarei instruct¸iuni?
a = a + (b ∗ c) DIV (c MOD (b + 2)) − ((c − 1) ∗ (b + 2))
A. 1 B. 8 C. 9 D. 10
14. ✓ ?Fie variabilele x = 8, y = 15 ¸si z = 5. Ce valoare va avea urm˘atoarea expresie?

(x MOD (y − 1)) + (z ∗ (x + 1))

DIV ((y − 1) MOD (z − 1))
A. 25 B. 26 C. 27 D. 28
15. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
(A OR B) AND ( NOT A OR C) OR (B AND ( NOT C OR A))
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea True.
A. A = True, B = False, C = True
B. A = False, B = True, C = False
C. A = True, B = True, C = False
D. A = False, B = False, C = True
16. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
( NOT C AND B) OR (A AND NOT B) AND ( NOT A OR C)
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea True.
A. A = True, B = False, C = False
B. A = False, B = True, C = False
C. A = True, B = True, C = False
D. A = False, B = False, C = True
17. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
((A AND ( NOT B OR C)) OR (( NOT A AND B) AND ( NOT C OR A))) AND (B OR NOT C)
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea True.
9

Subiect · pagina 15

Tipuri de date. Operatori. Probleme
A. A = True, B = False, C = False
B. A = False, B = True, C = False
C. A = True, B = True, C = False
D. A = True, B = False, C = True
18. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
( NOT ((A OR B) AND C) OR ((B AND NO C) OR (NOTA AND (C OR NOT B)))) AND A
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea True.
A. A = True, B = True, C = False
B. A = False, B = False, C = True
C. A = True, B = False, C = False
D. A = True, B = False, C = True
19. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
(((A AND B) OR (NOT C AND A)) AND (B OR NOT A)) OR (( NOT B AND C) AND ( NOT A OR B))
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea True.
A. A = True, B = False, C = False
B. A = False, B = False, C = True
C. A = True, B = False, C = True
D. A = True, B = True, C = False
20. ✓ ?Se consider˘a urm˘atoarea expresie logic˘a:
(((A OR (NOT B AND C)) AND (NOT A OR B)) OR (( NOT C OR A) AND ( NOT B OR NOT A))) AND C
Precizat, i pentru ce valori ale lui A, B, C, expresia are valoarea False.
A. A = True, B = True, C = False
B. A = True, B = False, C = True
C. A = False, B = True, C = False
D. A = False, B = False, C = True
21. ✓ ?Fie variabilele p = 12, q = 3 ¸si r = 4. Ce valoare va avea expresia urm˘atoare?

((p + 1) MOD q) + (r ∗ (p + 1))

−

q MOD (r − 1)

+

(p + 1) DIV (q + 2)

A. 50; B. 52; C. 55; D. 56.
22. ✓ ?Fie variabilele a = 9, b = 2 ¸si c = 5. Ce valoare va avea expresia urm˘atoare?

(a − 1) MOD b

+

b ∗ (c + 1)

−

(a − 1) DIV b

A. 7; B. 8; C. 9; D. 10.
23. ✓ ?Fie variabilele x = 25, y = 4 ¸si z = 2. Ce valoare va avea urm˘atoarea expresie?
(x MOD y) +

(y + 1) ∗ z

−

x DIV (y + 1)

10

Subiect · pagina 16

Tipuri de date. Operatori. Probleme
A. 4; B. 6; C. 8; D. 10.
24. ✓ ?Fie variabilele a = 30, b = 6, c = 2. Ce valoare va avea expresia urm˘atoare?

a DIV b − c

+

(b − 1) MOD (c + 1)

+

a MOD (b − 1)

A. 3; B. 4; C. 5; D. 6.
25. ✓ ?Fie variabilele m = 10, n = 3 ¸si p = 3. Ce valoare va avea m dup˘a instruct¸iunea:
m = ((m + 1) MOD n) +

(n − 1) ∗ p

−

(m + 1) DIV (p + 0)

A. 3; B. 4; C. 5; D. 6.
26. ✓ ?Fie variabilele a = 14, b = 7 ¸si c = 2. Ce valoare va avea expresia urm˘atoare?

a MOD (b − 1)

+

(a + 1) DIV (b − 1) + c

∗

2 MOD (b − 1)

A. 10; B. 16; C. 18; D. 20.
27. ✓ ?Fie variabilele x = 4, y = 2 ¸si z = 1. Ce valoare va avea x dup˘a executarea acestei
instruct, iuni?
x = (x ∗ (y + 1)) −

(y + 1) DIV (z + 1)

+

(x + 1) MOD y

A. 10; B. 11; C. 12; D. 13.
28. ✓ ?Fie variabilele a = 6, b = 3, c = 2. Ce valoare va avea urm˘atoarea expresie?

a DIV (b − 1)

+

(b − 1) ∗ (c MOD (a + 1))

−

a MOD (c + 1)

A. 5; B. 6; C. 7; D. 8.
29. ✓ ?Fie variabilele u = 12, v = 4, w = 3. Ce valoare va avea expresia?

(u − 1) ∗ v

DIV

(u − 1) MOD w

+

(v − 1) MOD (w − 1)

A. 20; B. 21; C. 22; D. 23.
30. ✓ ?Fie variabilele x = 5, y = 3, z = 10. Ce valoare va avea expresia urm˘atoare?

x MOD y

+

z DIV (y + 1)

−

(z − 1) MOD (x − 1)

11

Subiect · pagina 17

Tipuri de date. Operatori. Probleme
A. 2; B. 3; C. 4; D. 5.
31. ✓ ?Fie variabilele x = 7, y = 4, z = 2. Care este valoarea urm˘atoarei expresii?

(x MOD (y − 1)) + (z ∗ (x + 2))

−

(x + 2) DIV z

A. 15; B. 16; C. 17; D. 18.
32. ✓ ?Fie variabilele a = 12, b = 5, c = 3. Care este valoarea returnat˘a de expresia
urm˘atoare?

(a DIV b) > c

AND

(b − 1) < c

OR

a MOD (b − 1) = 2

A. True;
B. False;
C. Eroare de compilare;
D. Niciuna dintre variante.
33. ✓ ?Fie tipul de date signed char, reprezentat pe 8 bit, i cu semn. Care este domeniul
de valori care se pot reprezenta pe acest tip de date?
A. [−128, 127]; B. [−127, 128]; C. [0, 255]; D. [−256, 255].
34. ✓ ?Fie variabila k = 3. Ce valoare va avea k dup˘a executarea acestei instruct, iuni?
k = k +

(k + 2) MOD (k + 2)

+

(k + 1) DIV 2

A. 1; B. 2; C. 3; D. 5.
35. ✓ ?Fie tipul de date unsigned long, reprezentat pe 32 de bit, i. Care dintre urm˘atoarele
intervale este valabil pentru valorile reprezentabile pe acest tip de date?
A. [0, 231 − 1]; B. [0, 232 − 1]; C. [0, 263 − 1]; D. [0, 264 − 1].
36. ✓ ?Fie variabilele x = 10, y = 5. Ce valoarea va returna expresia urm˘atoare?

x > 5

AND

(x + y) < 20

OR

y MOD 2 = 1

A. True;
B. False;
C. Eroare de compilare;
D. Niciuna dintre variante.
37. ✓ ?Fie variabila n = 255 de tipul short. Poate valoarea lui n s˘a fie stocat˘a f˘ar˘a dep˘a¸sire
ˆıntr-o alt˘a variabil˘a de tipul signed char?
12

Subiect · pagina 18

Tipuri de date. Operatori. Probleme
A. Da;
B. Nu;
C. Depinde de limbajul de programare;
D. Depinde de implementare.
38. ✓ ?Fie variabilele a = 8, b = 3, c = 1. Ce valoare va returna expresia urm˘atoare?

(a + 1) DIV b

−

b MOD c

+

(a + 1) MOD b

A. 1; B. 6; C. 2; D. 3.
39. ✓ ?Fie variabila x de tipul signed short. Init, ializarea x = 200 este:
A. Incorect˘a, deoarece dep˘as, es, te inter-
valul lui signed short;
B. Corect˘a, deoarece signed short
stocheaz˘a valori pˆan˘a la 127;
C. Corect˘a, deoarece signed short ac-
cept˘a valori din [-32768, 32767];
D. Depinde de implementare.
40. ✓ ?Fie variabilele m = 15, n = 4, p = 2. Care e valoarea final˘a a lui m dup˘a instruct¸iunea
urm˘atoare?
m =

m MOD (n + p)

+

n DIV p

A. 1; B. 3; C. 5; D. 7.
41. ✓ ?Care este limita inferioar˘a garantat˘a pentru tipul de dat˘a long long reprezentat pe
minim 64 de bit, i cu semn?
A. −263; B. −264; C. 0; D. Depinde.
42. ✓ ?Fie variabilele x = 13, y = 3, z = 5. Ce valoare va returna expresia urm˘atoare?

(x MOD y) = 1

AND

(z ∗ y) > x

OR

x < (z + y)

A. True;
B. False;
C. Eroare de compilare;
D. Niciuna dintre variante.
43. ✓ ?Fie variabilele a = 1, b = 2, c = 3. Ce valoare va returna expresia urm˘atoare?

(b DIV a) > 0

OR

(c − 1) < (b + 1)

AND

a == 2

A. True;
B. False;
C. Eroare de compilare;
D. Niciuna dintre variante.
44. ✓ ?Fie variabilele x = 6 s, i y = 10. Ce valoarea va returna urm˘atoarea expresie?

(x + y) ≤ 15

AND

(y − x) ≥ 4

OR

(x ∗ y) MOD 2 = 0

13

Subiect · pagina 19

Tipuri de date. Operatori. Probleme
A. True;
B. False;
C. Eroare de compilare;
D. Niciuna dintre variante.
45. ✓ ?Care dintre urm˘atoarele expresii logice sunt adev˘arate dac˘a s, i numai dac˘a valoarea
natural˘a memorat˘a ˆın variabila x este multiplu de 5 s, i apart, ine intervalului (a, b]?
A. NOT(x MOD 5̸ = 0 OR x ≤ a) AND (x ≤ b)
B. x MOD 5̸ = 1 AND x > a AND x ≤ b
C. x MOD 5 = 0 AND NOT(x < a AND x > b)
D. NOT(x MOD 5̸ = 0 AND x ≤ a AND x > b)
14

Subiect · pagina 20

3
Tipuri structurate de date
Acest capitol acoper˘a
• Care este important, a tipurilor structurate de date?
• Care sunt tipurilor de date structurate studiate s, i cum le folosim?
3.1 Teorie
3.1.1 Introducere
Tipurile structurate de date reprezint˘a un concept fundamental ˆın informatic˘a, acestea
permit, ˆand organizarea eficient˘a a informat, iilor ˆın programe s, i aplicat, ii, facilitˆand atˆat
manipularea, cˆat s, i accesarea rapid˘a a datelor. Ele sunt utilizate pentru a gestiona vo-
lume mari de date s, i pentru a rezolva probleme complexe, cum ar fi c˘autarea, sortarea
sau determinarea celui mai scurt drum ˆıntre dou˘a puncte ˆıntr-o ret, ea.
Analogic, putem compara acest concept cu o list˘a de cump˘ar˘aturi: ˆın loc s˘a ai obiec-
tele ˆımpr˘as, tiate peste tot, le organizezi ˆıntr-o list˘a bine structurat˘a, unde s, tii exact ce
trebuie s˘a cumperi s, i ˆın ce ordine. Similar, ˆın programare, structurile de date sunt utilizate
pentru a organiza informat, ia ˆıntr-un mod eficient, permit, ˆand accesarea s, i manipularea
rapid˘a s, i corect˘a a datelor.
Tipuri structurate de date:
• Tipul tablou;
• Tipul s, ir de caractere;
• Tipul ˆınregistrare.
3.1.2 Tipul tablou: tablouri ˆın memorie
Un tablou este o structur˘a de date compus˘a dintr-un num˘ar fix de elemente, toate avˆand
acelas, i tip de baz˘a. Acesta reprezint˘a o zon˘a de memorie identificat˘a printr-un nume
specific, permit, ˆand stocarea mai multor valori de acelas, i tip. Datele dintr-un tablou
pot fi gestionate fie ca un tot unitar, fie ca elemente independente, facilitˆand accesul rapid
s, i organizat la fiecare valoare.
Tablourile de memorie studiate sunt:
• Tablouri de memorie unidimensionale;
• Tablouri de memorie bidimensionale.

Subiect · pagina 21

Tipuri structurate de date Teorie
3.1.3 Tablouri de memorie unidimensionale
Tablourile unidimensionale, cunoscute s, i sub denumirea de vectori, sunt structuri de
date caracterizate prin un singur indice, fiecare element fiind accesibil prin intermediul
acestuia. Dac˘a un tablou cont, ine un num˘ar de elemente, indicii acestor elemente sunt
valori ˆıntregi cuprinse ˆın intervalul [1, num˘arul de elemente]. Astfel, vectorii permit
organizarea eficient˘a a datelor ˆın memorie s, i faciliteaz˘a efectuarea de operat, ii asupra
fiec˘arui element ˆın parte, eliminˆand necesitatea stoc˘arii individuale a fiec˘arei variabile.
De exemplu, vectorul v cu un num˘ar de n elemente poate fi reprezentat astfel:
v[1] v[2] ... ... v[n]
Operat, ii cu vectori:
Citirea elementelor unui vector:
Algorithm Citire(v,n)
For i ← 1, n execute
Read v[i]
EndFor
EndAlgorithm
Afis, area elementelor unui vector:
Algorithm Afis, are(v,n)
For i ← 1, n execute
Write v[i]
EndFor
EndAlgorithm
Afis, area elementelor unui vector ˆın ordine invers˘a:
Algorithm Afis, areR(v,n)
For i ← n, 1, −1 execute
Write v[i]
EndFor
EndAlgorithm
Cele mai ˆıntˆalnite probleme cu vectori sunt:
• Inversarea unui vector
• Suma elementelor unui vector
• Determinarea valorii minime/maxime
• Inserarea sau eliminarea unui element
• C˘autarea unui element
16

Subiect · pagina 22

Tipuri structurate de date Teorie
• Secvent, e, interclasare, sortare
• Vectori de frecvent, ˘a
Elementele unui tablou pot fi de orice tip de date disponibil ˆın limbajul de programare
utilizat. Astfel, ele pot fi chiar s, i alte tablouri, ceea ce permite crearea de tablouri bidi-
mensionale, cunoscute s, i sub numele de matrice.
3.1.4 Tablouri de memorie bidimensionale
Un tablou bidimensional este o structur˘a de date cu dou˘a dimensiuni: una cores-
punz˘atoare liniilor s, i alta coloanelor. Fiecare element este accesibil folosind doi in-
dici, unul pentru linia pe care se afl˘a s, i altul pentru coloana respectiv˘a. De exemplu,
matrice[i][j] reprezint˘a elementul aflat la intersect, ia liniei i s, i a coloanei j. O matrice cu
num˘arul de linii egal cu num˘arul de coloane se numes, te o matrice p˘atratic˘a.
Tablourile bidimensionale sunt utilizate pentru a reprezenta date sub form˘a de gril˘a sau
tabel, cum ar fi matrice matematice, tabele de scoruri, imagini sau h˘art, i. Acestea ofer˘a
un mod eficient de a organiza s, i accesa date structurale complexe s, i sunt esent, iale ˆın
diverse domenii, cum ar fi calculul numeric, grafica computerizat˘a s, i s, tiint, a datelor.
De exemplu, matricea mat cu n linii s, i m coloane poate fi reprezentat˘a ˆın urm˘atorul
mod:
mat[1][1] mat[1][2] ... mat[1][m]
mat[2][1] mat[2][2] ... mat[2][m]
... ... ... ...
mat[n][1] mat[n][2] ... mat[n][m]
Operat, ii cu matrice:
Citirea elementelor unei matrice:
Algorithm Citire(mat,n,m)
For i ← 1, n execute
For j ← 1, m execute
Read mat[i][j]
EndFor
EndFor
EndAlgorithm
17

Subiect · pagina 23

Tipuri structurate de date Teorie
Afis, area elementelor unei matrice:
Algorithm Afis, are(mat,n,m)
For i ← 1, n execute
For j ← 1, m execute
Write mat[i][j]
EndFor
EndFor
EndAlgorithm
3.1.5 Matrici p˘atratice
Not˘am cu n num˘arul de linii s, i coloane ale matricei, i reprezentˆand indicele liniei, iar j
indicele coloanei.
Relat, iile dintre indicii unei matrice p˘atratice:
- Diagonala principal˘a: Elementele de pe diagonala principal˘a sunt cele pentru care
indicele liniei este egal cu indicele coloanei, adic˘a i = j. Deasupra diagonalei principale,
se respect˘a relat, ia i < j, iar sub diagonala principal˘a i > j.
- Diagonala secundar˘a: Elementele de pe diagonala secundar˘a sunt cele pentru care
suma indicilor liniei s, i coloanei este egal˘a cu n−1, adic˘a i+j = n+1. Deasupra diagonalei
secundare, se respect˘a relat, ia i + j < n + 1, iar sub diagonala secundar˘a i + j > n + 1.
Prin trasarea ambelor diagonale, se delimiteaz˘a patru zone diferite ale matricei: Nord,
Sud, Est s, i Vest
Nord
Sud
EstVest
• Nord: Elemente situate deasupra di-
agonalei principale s, i a diagonalei se-
cundare, unde i < j s, i i + j < n + 1.
• Sud: Elemente situate sub diagonala
principal˘a s, i sub diagonala secundar˘a,
unde i > j s, i i + j > n + 1.
• Vest: Elemente situate sub diago-
nala secundar˘a, dar deasupra diagona-
lei principale, unde i > j s, i i + j <
n + 1.
• Est: Elemente situate deasupra dia-
gonalei secundare, dar sub diagonala
principal˘a, unde i < j s, i i + j > n + 1.
Cele mai ˆıntˆalnite probleme cu matrice sunt:
• Interschimbarea a dou˘a linii sau coloane
• Rotirea unei matrice
• Labirint
3.1.6 Tipul s, ir de caractere
Un s, ir de caractere este o structur˘a de date utilizat˘a pentru a stoca s, i manipula secvent, e
de caractere. Acesta poate reprezenta cuvinte, propozit, ii sau alte combinat, ii de caractere,
18

Subiect · pagina 24

Tipuri structurate de date Probleme
fiind unul dintre cele mai utilizate tipuri de date ˆın programare. ˆIn majoritatea limbajelor
de programare, un s, ir este tratat ca un tablou unidimensional de caractere.
Reprezentarea s, irurilor de caractere s, i codurile ASCII:
Fiecare caracter dintr-un s, ir este reprezentat intern printr-un cod numeric, conform stan-
dardului ASCII (American Standard Code for Information Interchange). De exemplu:
-’A’ are codul ASCII 65.
-’a’ are codul ASCII 97.
-’0’ are codul ASCII 48.
Aceast˘a reprezentare permite manipularea direct˘a a caracterelor folosind operat, ii pe co-
durile lor. ˆIn memorie, un s, ir de caractere este stocat sub forma unui tablou de caractere,
fiecare celul˘a cont, inˆand codul ASCII al unui caracter. S, irul este terminat de caracterul
special ’\0’ (null) pentru a marca sfˆars, itul.
Accesarea unui caracter dintr-un s, ir:
Fiecare caracter al unui s, ir poate fi accesat folosind un indice (ˆıncepˆand de la 1). De
exemplu, pentru s, irul de caractere s = ”admitere UBB”, s[1] = ’a’, s[5] = ’t’, s[8] = ’ ’,
s[12] = ’B’ s, i s[13] = ’\0’.
3.2 Probleme
46. ✓ ?Se consider˘a algoritmul Verifica(n, a), unde n este un num˘ar natural (1 ≤ n ≤
103) s, i a este un vector cu n elemente numere ˆıntregi (a[1], a[2], ..., a[n]), unde −100 ≤
a[i] ≤ 100, pentru i = 1, 2, ..., n:
Algorithm Verifica(n, a)
m ← n DIV 2
For i ← 1,m execute
If n MOD 2 = 0 then
aux ← a[m + i]
a[m + i] ← a[n − i + 1]
a[n − i + 1] ← aux
Else
aux ← a[m + i + 1]
a[m + i + 1] ← a[n − i + 1]
a[n − i + 1] ← aux
EndIf
EndFor
For i ← 1,m execute
If a[i]̸ = a[n − i + 1] then
Return False
EndIf
EndFor
Return True
EndAlgorithm
Se cere s˘a se determine pentru ce valori ale
vectorului a, apelul Verifica(n, a) retur-
neaz˘a True.
A. a = [1, 2, 3, 4, 3, 2, 1];
B. a = [1, 2, 3, 3, 3, 1, 2, 1];
C. a = [1, 2, 1, 2];
D. a = [−200, 10, −200].
47. ✓ ?Se consider˘a algoritmul Alg(x, m), unde m este un num˘ar natural (1 ≤ m ≤ 103)
s, i x este un vector cu m elemente numere ˆıntregi (x[1], x[2], ..., x[m]), unde −100 ≤
x[i] ≤ 100, pentru i = 1, 2, ..., m:
19

Subiect · pagina 25

Tipuri structurate de date Probleme
Algorithm Alg(x, m)
f x ← 0
For p ← 1,m execute
a ← 0
For q ← p,m execute
a ← a + x[q]
If a = 0 then
w ← q − p + 1
If w > f x then
f x ← w
EndIf
EndIf
EndFor
EndFor
Return f x
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
false?
A. Algoritmul are o complexitate de timp
O(m3);
B. Variabila a este folosit˘a pentru a cal-
cula lungimea unei subsecvent, e;
C. Pentru x = [2, 2, 2], rezultatul retur-
nat este 0;
D. Pentru x =
[0, 2, −2, 1, 1, −1, 1, 6, 0, −1], re-
zultatul returnat este 4.
48. ✓ ?Se consider˘a algoritmul Contor(x,n), unde n este un num˘ar natural (1 ≤ n ≤ 103) s, i
x este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]), unde 0 ≤ x[i] ≤ 105,
s, i algoritmul Alg(numar), unde numar este un num˘ar natural (0 ≤ numar):
Algorithm Alg(numar)
If numar < 2 then Return False
EndIf
For d ← 2,√numar execute
If numar MOD d = 0 then
Return False
EndIf
EndForReturn True
EndAlgorithm
Algorithm Contor(x, n)
count ← 0
For i ← 1,n − 1 execute
For j ← i + 1 to n execute
v ← x[i]
asc ← True
ok ← 1
For k ← i,j − 1 execute
If x[k] ≥ x[k + 1] then
asc ← False
ok ← 0
EndIf
If ok = 1 then
v ← v + x[k + 1]
EndIf
EndFor
If asc AND Alg(v) then
count ← count + 1
EndIf
EndFor
EndFor
Return count
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru x = [7, 7, 7, 7, 7, 7, 7], rezulta-
tul returnat de Contor(x,7) este 7;
B. Pentru x = [2, 3, 5, 7], rezultatul re-
turnat de Contor(x,4) este 2;
C. Pentru x = [7, 5, 3, 2], rezultatul re-
turnat de Contor(x,4) este 2;
D. Pentru x = [7, 2, 2, 9, 6], rezultatul re-
turnat de Contor(x,5) este 1.
20

Subiect · pagina 26

Tipuri structurate de date Probleme
49. ✓ ?Se consider˘a 2 algoritmi: A(x,n,k) s, i B(x,n,k), unde n este un num˘ar natural
(1 ≤ n ≤ 103) s, i x este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]),
unde 0 ≤ x[i] ≤ 105, pentru i = 1, 2, ..., n, k num˘ar natural.
Algorithm A(x, n, k)
k ← k MOD n
For i ← 1, k execute
temp[i] ← x[i]
EndFor
For i ← k + 1, n execute
x[i − k] ← x[i]
EndFor
For i ← 1, k execute
x[n − k + i] ← temp[i]
EndFor
EndAlgorithm
Algorithm Helper(x, n)
primul ← x[1]
For i ← 1, n − 1 execute
x[i] ← x[i + 1]
EndFor
x[n] ← primul
EndAlgorithm
Algorithm B(x, n, k)
For i ← 1, k execute
Helper(x, n)
EndFor
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul A face acelas, i lucru ca algoritmul B, dar algoritmul A este mai eficient;
B. Algoritmul A nu face acelas, i lucru ca algoritmul B;
C. Algoritmul A face acelas, i lucru ca algoritmul B, dar algoritmul B este mai eficient;
D. Algoritmul A face acelas, i lucru ca algoritmul B doar dac˘a k = n.
50. ✓ ?Se consider˘a algoritmul Calculeaza(x,n), unde n este un num˘ar natural (1 ≤ n ≤
103) s, i x este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]), unde −104 ≤
x[i] ≤ 104, pentru i = 1, 2, ..., n:
Algorithm Calculeaza(x, n)
s ← x[1]
a ← x[1]
For i ← 2, n execute
If a + x[i] > x[i] then
a ← a + x[i]
Else
a ← x[i]
EndIf
If a > s then
s ← a
EndIf
EndFor
Return s
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru x =
[−2, 1, −3, 4, −1, 2, 1, −5, 4], rezul-
tatul returnat de Calculeaza(x,9)
este 6;
B. Pentru x = [1, −2, 3, 5, −1], rezultatul
returnat de Calculeaza(x,5) este 8;
C. Pentru x = [−1, −2, −3, −4], rezulta-
tul returnat de Calculeaza(x,4) este
−1;
D. Pentru x = [2, 4, −1, 3], rezultatul re-
turnat de Calculeaza(x,4) este 6.
Problemele 51. s, i 52. se refer˘a la urm˘atorii 2 algoritmi:
Se consider˘a algoritmul Afiseaza(x,n,k), unde n este un num˘ar natural (1 ≤ n ≤
103), x este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]), unde −104 ≤
x[i] ≤ 104, pentru i = 1, 2, ..., n, s, i k este un num˘ar natural (1 ≤ k ≤ n), s, i algoritmul
A(x,n), unde n, x au aceleas, i restrict, ii ca pentru algoritmul Afiseaza(x,n,k):
21

Subiect · pagina 27

Tipuri structurate de date Probleme
Algorithm A(x, n)
For i ← 1,n − 1 execute
For j ← i + 1,n execute
If x[i] > x[j] then
a ← x[i]
x[i] ← x[j]
x[j] ← a
EndIf
EndFor
EndFor
EndAlgorithm
Algorithm Afiseaza(x, n, k)
A(x, n)
i ← 1
While i ≤ n execute
count ← 1
While i + count ≤ n AND
x[i] = x[i + count] execute
count ← count + 1
EndWhile
If count MOD k̸ = 0 then
scrie x[i]
EndIf
i ← i + count
EndWhile
EndAlgorithm
51. ✓ ?Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Apelul algoritmului A(x,n) nu afecteaz˘a rezultatul afis, at de algoritmul
Afiseaza(x,n,k), indiferent de parametri;
B. Apelul algoritmului A(x,n) nu afecteaz˘a rezultatul afis, at de algoritmul
Afiseaza(x,n,k), dac˘a s, i numai dac˘a s, irul x este ordonat cresc˘ator;
C. Algoritmul A(x,n) sorteaz˘a cresc˘ator s, irul x;
D. Algoritmul A(x,n) sorteaz˘a descresc˘ator s, irul x.
52. ✓ ?Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru x = [1, 4, 1, 2, 3, 3, 2] s, i k = 2, rezultatul afis, at de Afiseaza(x,7,2) este
4;
B. Pentru x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] s, i k = 3, rezultatul afis, at de Afiseaza(x,10,3)
este 1, 2, 4;
C. Pentru x = [5, 6, 5, 7, 6, 6, 7] s, i k = 2, rezultatul afis, at de Afiseaza(x,7,2) este
5, 7;
D. Pentru x = [2, 2, 4, 4, 4, 6, 4, 5] s, i k = 2, rezultatul afis, at de Afiseaza(x,8,2) este
4, 6.
53. ✓ ?Se consider˘a algoritmul Peak(x,n), unde n este un num˘ar natural (3 ≤ n ≤ 103), x
este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]), unde −104 ≤ x[i] ≤
104, pentru i = 1, 2, ..., n:
Algorithm Peak(x, n)
i ← 1
While i < n and x[i] < x[i + 1] execute
i ← i + 1
EndWhile
If i = 1 or i = n then
Return False
EndIf
While i < n and x[i] > x[i + 1] execute
i ← i + 1
EndWhile
22

Subiect · pagina 28

Tipuri structurate de date Probleme
Return i = n
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru x = [1, 2], rezultatul returnat de Peak(x,2) este True;
B. Pentru x = [1, 4, 3, 2, 1], rezultatul returnat de Peak(x,5) este True;
C. Pentru x = [1, 3, 3, 2, 1], rezultatul returnat de Peak(x,5) este False;
D. Pentru x = [1, 2, 3, 4], rezultatul returnat de Peak(x,3) este True.
54. ✓ ?Se consider˘a algoritmul Down(x,n), unde n este un num˘ar natural (3 ≤ n ≤ 103), x
este un vector cu n elemente numere ˆıntregi (x[1], x[2], ..., x[n]), unde −104 ≤ x[i] ≤
104, pentru i = 1, 2, ..., n:
Algorithm Down(x, n)
i ← 1
While i < n and x[i] > x[i + 1] execute
i ← i + 1
EndWhile
If i = 1 or i = n then
Return False
EndIf
While i < n and x[i] < x[i + 1] execute
i ← i + 1
EndWhile
If i = n then
Return True
Else
Return False
EndIf
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru x = [4, 2, 3, 5], rezultatul returnat de Down(x,4) este True;
B. Pentru x = [4, 3, 2, 1], rezultatul returnat de Down(x,4) este True;
C. Pentru x = [1, 2, 3, 4], rezultatul returnat de Down(x,4) este False;
D. Pentru x = [4, 3, 3, 2, 1], rezultatul returnat de Down(x,5) este True.
55. ✓ ?Se consider˘a algoritmul Get(a,b,n,m), unde n s, i m sunt lungimile sirurilor de ca-
ractere a s, i b, respectiv, iar a s, i b sunt dou˘a s, iruri de caractere formate din litere mici
ale alfabetului englez (a[1], a[2], ..., a[n]) s, i (b[1], b[2], ..., b[m]): Presupunem c˘a avem
definit urm˘atorul subalgoritm: ascii(c) - returneaz˘a codul ASCII al caracterului
c. Presupunem c˘a operat, iile aritmetice nu produc dep˘as, ire pe mult, imea numerelor
ˆıntregi.
Algorithm Get(a, b, n, m)
i ← 1
While i ≤ n and i ≤ m and a[i] = b[i] execute
i ← i + 1
EndWhile
Return i − 1
EndAlgorithm
23

Subiect · pagina 29

Tipuri structurate de date Probleme
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru a = abcdef, b = abcxyz, rezultatul returnat de Get(a,b,6,6) este 3;
B. Pentru a = hello, b = world, rezultatul returnat de Get(a,b,5,5) este 1;
C. Pentru a = test, b = testcase, rezultatul returnat de Get(a,b,4,8) este 4;
D. Pentru a = abcd, b = abef, rezultatul returnat de Get(a,b,4,4) este 2.
56. ✓ ?Se d˘a un s, ir a de n caractere din alfabetul englez, (a[1], a[2], ..., a[n]). Dorim s˘a afl˘am
cea mai lung˘a subsecvent, ˘a a sa care este palindrom. Care dintre urm˘atoarele imple-
ment˘ari returneaz˘a lungimea acestei subsecvent, e la apelul LongestPalindrome(a,n)?
A.
Algorithm LongestPalindrome(a, n)
maxLength ← 1
For i ← 1,n execute
len1 ← ExpandAroundCenter(a, n, i, i)
len2 ← ExpandAroundCenter(a, n, i, i+1)
If len1 > maxLength then
maxLength ← len1
EndIf
If len2 > maxLength then
maxLength ← len2
EndIf
EndFor
Return maxLength
EndAlgorithm
Algorithm ExpandAroundCenter(a, n, l, r)
While l ≥ 1 and r ≤ n and a[l] = a[r] execute
l ← l − 1
r ← r + 1
EndWhile
Return r − l − 1
EndAlgorithm
B.
Algorithm LongestPalindrome(a, n)
maxLength ← 0
For i ← 1 to n execute
For j ← i + 1 to n execute
If a[i] = a[j] then
If j − i + 1 > maxLength then
maxLength ← j − i + 1
EndIf
EndIf
EndFor
EndFor
Return maxLength
EndAlgorithm
C.
Algorithm LongestPalindrome(a, n)
maxLength ← 1
start ← 1
For i ← 1,n execute
24

Subiect · pagina 30

Tipuri structurate de date Probleme
dp[i][i] ← True
EndFor
For i ← 1,n − 1 execute
If a[i] = a[i + 1] then
dp[i][i + 1] ← True
start ← i
maxLength ← 2
EndIf
EndFor
For len ← 3,n execute
For i ← 1,n − len + 1 execute
j ← i + len − 1
If a[i] = a[j] and dp[i + 1][j − 1] = True then
dp[i][j] ← True
If len > maxLength then
maxLength ← len
start ← i
EndIf
EndIf
EndFor
EndFor
Return maxLength
EndAlgorithm
D. Niciuna dintre variante.
57. ✓ ?Se consider˘a algoritmul Compute(m,n), unde n este dimensiunea unei matrici p˘atratice
m de dimensiune n x n, iar m este o matrice cu elemente ˆıntregi (m[1][1], m[1][2], ...,
m[n][n]):
Algorithm Compute(m, n)
p1 ← 1
p2 ← 1
For i ← 1 to n execute
p1 ← p1 · m[i][i]
p2 ← p2 · m[i][n − i + 1]
EndFor
Return p1 · p2
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru m =
1 2
3 4

, rezultatul returnat de Compute(m,2) este 11;
B. Pentru m =


2 3 4
5 6 7
8 9 10

, rezultatul returnat de Compute(m,3) este 23040;
C. Pentru m =


1 0 0
0 1 0
0 0 1

, rezultatul returnat de Compute(m,3) este 1;
D. Pentru m =


3 1 2
4 5 6
7 8 9

, rezultatul returnat de Compute(m,3) este 11430.
25

Subiect · pagina 31

Tipuri structurate de date Probleme
Problemele 58. s, i 59. se refer˘a la urm˘atorii 2 algoritmi:
Se consider˘a algoritmul algoritmul B(m,n), unde n este dimensiunea unei matrici
p˘atratice m de dimensiune n x n, iar m este o matrice cu elemente ˆıntregi (m[1][1], m[1][2],
..., m[n][n]), s, i algoritmul A(m,n,i,s1,s2), unde m, n au aceleas, i restrict, ii ca pentru
algoritmul B(m,n), iar i,s1,s2 sunt numere ˆıntregi.
Algorithm A(m, n, i, s1, s2)
If i = n + 1 then
Return s1 − s2
EndIf
x ← 0
For j ← 1,n execute
x ← x + m[i][j]
EndFor
If i MOD 2 = 0 then
s1 ← s1 + x
Else
s2 ← s2 + x
EndIf
Return A(m, n, i + 1, s1, s2)
EndAlgorithm
Algorithm B(m, n)
Return A(m, n, 1, 0, 0)
EndAlgorithm
58. ✓ ?Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru m =
1 2
3 4

, rezultatul returnat de B(m,2) este 4;
B. Pentru m =

2 3 4
5 6 7
8 9 10

, rezultatul returnat de B(m,3) este −18;
C. Pentru m =

1 1 1
1 1 1
1 1 1

, rezultatul returnat de B(m,3) este 0;
D. Pentru m =


10 20 30
5 15 25
40 50 60

, rezultatul returnat de B(m,3) este 65.
59. ✓ ?Dac˘a ˆın subalgoritmul A(m,n,i,s1,s2), ˆınlocuim apelul Return A(m, n, i + 1, s1, s2)
cu Return A(m, n, i − 1, s1, s2), ce ar trebui modificat ˆın subalgoritmul B(m,n) pentru
a oferi acelas, i rezultat?
A. ˆInlocuim Return A(m, n, 1, 0, 0) cu Return A(m, n, 0, n, 0);
B. ˆInlocuim Return A(m, n, 1, 0, 0) cu Return A(m, n, 0, n, n − 1);
C. ˆInlocuim Return A(m, n, 1, 0, 0) cu Return A(m, n, 0, 0, n);
D. ˆInlocuim Return A(m, n, 1, 0, 0) cu Return A(m, n, n, 0, 0);
60. ✓ ?Se consider˘a algoritmii H(m,mx,nx) s, i G(m,mx,nx), unde m este o matrice cu mx
linii s, i nx coloane (m[1][1], m[1][2], ..., m[mx][nx]), mx s, i nx sunt numere naturale mai
26

Subiect · pagina 32

Tipuri structurate de date Probleme
mari decˆat 2:
Algorithm H(m, mx, nx)
For j ← 1,nx execute
temp ← m[mx − 2][j]
m[mx − 2][j] ← m[mx − 1][j]
m[mx − 1][j] ← temp
EndFor
For i ← 1,mx execute
temp ← m[i][nx − 2]
m[i][nx − 2] ← m[i][nx − 1]
m[i][nx − 1] ← temp
EndFor
Return m
EndAlgorithm
Algorithm G(m, mx, nx)
For i ← 1,mx execute
temp ← m[i][nx − 2]
m[i][nx − 2] ← m[i][nx − 1]
m[i][nx − 1] ← temp
EndFor
For j ← 1,nx execute
temp ← m[mx − 2][j]
m[mx − 2][j] ← m[mx − 1][j]
m[mx − 1][j] ← temp
EndFor
Return m
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Ambii algoritmi au acelas, i efect asupra unei matrici m;
B. Pentru m =




1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16



, rezultatul returnat de H(m,4,4)
este




1 2 4 3
5 6 8 7
13 14 16 15
9 10 12 11



;
C. Algoritmul H(m,mx,nx) returneaz˘a un rezultat diferit fat, ˘a de rezultatul returnat
de algoritmul G(m,mx,nx);
D. Pentru m =


1 2 3
4 5 6
7 8 9

, rezultatul returnat de G(m,3,3) este


1 2 3
7 8 9
4 5 6

.
61. ✓ ?Se consider˘a algoritmul Cauta(a, n , i, j), unde s este un vector cu n elemente,
init, ial egale cu 0, iar a un s, ir de numere ˆıntregi (a[1], a[2], ..., a[n]) cu n elemente,
1 ≤ i ≤ j < n + 1:
Algorithm Cauta(a, n, i, j)
s ← Construieste(a, n)
If i = 1 then
Return s[j]
Else
Return s[j] − s[i − 1]
EndIf
EndAlgorithm
Algorithm Construieste(a, n)
s[1] ← a[1]
For k ← 2,n execute
s[k] ← s[k − 1] + a[k]
EndFor
Return s
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
27

Subiect · pagina 33

Tipuri structurate de date Probleme
A. Pentru a = [1, 2, 3, 4, 5] s, i i = 2, j = 4, rezultatul returnat de Cauta(a,5,2,4)
este 9;
B. Pentru a = [1, 1, 1, 1, 1] s, i i = 1, j = 4, rezultatul returnat de Cauta(a,5,1,4)
este 5;
C. Algoritmul returneaz˘a suma elementelor dintre indicii i s, i j, inclusiv, ai vectorului
a;
D. Algoritmul returneaz˘a suma elementelor dintre indicii i s, i j, f˘ar˘a a[i], a[j], ai
vectorului a.
62. ✓ ?Se consider˘a algoritmul Find(m, n), unde n este dimensiunea unei matrici p˘atratice
m de dimensiune n x n.
Algorithm Find(m, n)
For i ← 1, n execute
For j ← i + 1, n execute
If m[i][j]̸ = m[j][i] then
Return False
EndIf
EndFor
EndFor
Return True
EndAlgorithm
Ce face algoritmul?
A. Verific˘a dac˘a toate elementele de pe marginea matricei sunt egale;
B. Verific˘a dac˘a toate elementele de pe diagonala principal˘a sunt egale;
C. Verific˘a dac˘a matricea este simetric˘a fat, ˘a de diagonala secundar˘a;
D. Verific˘a dac˘a matricea este simetric˘a fat, ˘a de diagonala principal˘a.
63. ✓ ?Se consider˘a algoritmul bin(arr, n), unde n este un num˘ar natural nenul (1 ≤ n ≤
104) s, i arr este un s, ir binar de n elemente.
Algorithm bin(arr, n)
cont ← 0
For i ← 1, n − 1 execute
cont ← cont + arr[i] * arr[i + 1]
EndFor
Return cont
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru apelul bin([0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,
0, 1, 1], 20), algoritmul returneaz˘a 6.
B. Pentru n = 11, exist˘a exact 233 s, iruri binare arr cu proprietatea c˘a apelul
bin(arr, n) returneaz˘a 0.
C. Pentru n = 6, exist˘a exact 20 s, iruri binare arr cu proprietatea c˘a apelul bin(arr,
n) returneaz˘a 0.
D. Pentru n = 8, exist˘a exact 201 s, iruri binare arr cu proprietatea c˘a apelul bin(arr,
n) returneaz˘a o valoare diferit˘a de 0.
28

Subiect · pagina 34

Tipuri structurate de date Probleme
64. ✓ ?Fie vectorul v = [3, 5, 2, 2, 7, 9, 1, 1, 4, 6]. Primul element este situat pe
pozit, ia 0. Care este valoarea expresiei urm˘atoare?
v[2 ∗ v[2 ∗ v[3] − 1] + 1] + v[2 ∗ v[7 − 5] − 1] + v[3 − v[2 ∗ v[2] − 3] + 6]
A. 11
B. 24
C. 18
D. Niciuna din variantele de mai sus.
65. ✓ ?Se consider˘a algoritmul Algo(a, n, m, k), unde a este un tablou bidimensional
cu dimensiunea n × m (1 ≤ n, m ≤ 103), unde n s, i m sunt numere naturale iar
fiecare element din a este un num˘ar natural. Parametrul k este un num˘ar natural
(1 ≤ k ≤ min(n, m)). Fie x o matrice de dimenisune n × m, unde fiecare element este
init, ializat cu 0.
Algorithm Algo(a, n, m, k)
max ← 0
For i ← 1, n execute
For j ← 1, m execute
If Check(a[i][j]) then
x[i][j] ← a[i][j]
EndIf
EndFor
EndFor
For i ← 1, n − k + 1 execute
For j ← 1, m − k + 1 execute
sum ← 0
For p ← 0, k − 1 execute
For q ← 0, k −1 execute
sum ← sum +
x[i + p][j + q]
EndFor
EndFor
If sum > max then
max ← sum
EndIf
EndFor
EndFor
Return max
EndAlgorithm
Algorithm Check(num)
If num ≤ 1 then
Return False
EndIf
For i ← 2, √num execute
If num MOD i = 0 then
Return False
EndIf
EndFor
Return True
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Complexitatea algoritmului este O(n · m · k2).
B. Algoritmul Algo determin˘a suma maxim˘a a elementelor prime dintr-o submatrice
k × k din a.
C. Pentru apelul f(a, 5, 5, 3) s, i matricea a =






2 3 4 5 6
3 5 7 9 11
4 5 7 10 13
5 9 13 17 4
6 11 16 4 9





 algoritmul
va returna valoarea 62.
29

Subiect · pagina 35

Tipuri structurate de date Probleme
D. Algoritmul verific˘a dac˘a exist˘a o submatrice k × k ˆın care toate elementele sunt
numere prime s, i returneaz˘a suma acestora.
66. ✓ ?Fie vectorul v = [4, 7, 1, 9, 6, 3, 8, 5, 5, 2]. Primul element este situat pe
pozit, ia 0. Care este valoarea expresiei urm˘atoare?
v[2 ∗ v[4] MOD 3] + v[v[7] DIV 2 − 1] ∗ v[3 − v[2] + 1]
A. 42
B. 67
C. Acelas, i rezultat ca al expresiei v[v[9] ∗ v[4] MOD v[5]] + v[v[8] DIV v[9] − v[2]] ∗
v[3 − v[2] + v[2]].
D. Acelas, i rezultat ca al expresiei v[v[8] MOD v[5]∗3]∗v[3]−v[v[9]]−v[0]−v[v[2] DIV 3]∗
v[4 − v[5]].
30

Subiect · pagina 36

4
Algoritmi elementari
Acest capitol acoper˘a
• Baze de numerat, ie
• Divizibilitate
• Determinare minim/maxim
• C˘aut˘ari secvent, iale/binare pe s, iruri de numere
• Interclasare
• Metode de sortare
4.1 Teorie
4.1.1 Baze de numerat, ie
Cu except, ia bazei 10, alte baze de numerat, ie utilizate frecvent sunt:
• Baza 2 (binar): cifrele 0 s, i 1, utilizat˘a ˆın computere.
• Baza 8 (octal): cifrele 0-7, folosit˘a pentru simplificarea reprezent˘arii binare.
• Baza 16 (hexazecimal): cifrele 0-9 s, i literele A − F (A = 10, B = 11, ..., F = 15).
• Baza b (caz general): cifrele 0, 1, ..., b − 1
Transformarea din baza 10 ˆın baza b
Transformarea unui num˘ar n din baza 10 ˆın baza b, se realizeaz˘a utilizˆand metoda
ˆımp˘art, irii repetate, conform urm˘atorilor pas, i:
• ˆImparte cu rest num˘arul n la baza b.
• Noteaz˘a restul (care va deveni o cifr˘a ˆın baza b).
• ˆImparte cˆatul obt, inut anterior la baza b.
• Repet˘a pˆan˘a cˆand cˆatul devine 0.
• Resturile obt, inute, scrise ˆın ordinea invers˘a obt, inerii, reprezint˘a scrierea ˆın baza b
a lui n.

Subiect · pagina 37

Algoritmi elementari Teorie
Pasul 1: 46 ÷ 3 = 15
Rest: 1
Pasul 2: 15 ÷ 3 = 5
Rest: 0
Pasul 3: 5 ÷ 3 = 1
Rest: 2
Pasul 4: 1 ÷ 3 = 0
Rest: 1
Rezultat final:
46(10) = 1201(3)
Transformare iterativ˘a din baza 10 ˆın
baza b:
1: Algorithm iterativ(n, b)
2: poz ← 0
3: While n > 0 execute
4: poz ← poz + 1
5: cif re[poz] ← n MOD b
6: n ← n DIV b
7: EndWhile
8: For i ← poz, 1, −1 execute
9: Write cif re[i]
10: EndFor
11: EndAlgorithm
Complexitate: O(log(n))
Transformare recursiv˘a din baza 10 ˆın
baza b:
1: Algorithm recursiv(n, b)
2: If n > 0 then
3: recursiv(n DIV b, b)
4: Write n MOD b
5: EndIf
6: EndAlgorithm
Complexitate: O(log(n))
Transformarea din baza b ˆın baza 10
Pentru a converti un num˘ar din baza b ˆın baza 10, folosim o formul˘a care exprim˘a num˘arul
ca o sum˘a de puteri ale bazei b. Fie un num˘ar ckck−1 . . . c1c0(b), atunci conversia acestuia
ˆın baza 10 se face conform formulei:
ckck−1 . . . c1c0(b) = ck · bk + ck−1 · bk−1 + · · · + c1 · b1 + c0 · b0
Exemplu:
11010001(2) = 1 · 27 + 1 · 26 + 0 · 25 + 1 · 24 + 0 · 23 + 0 · 22 + 0 · 21 + 1 · 20
= 1 · 128 + 1 · 64 + 0 · 32 + 1 · 16 + 0 · 8 + 0 · 4 + 0 · 2 + 1 · 1
= 128 + 64 + 0 + 16 + 0 + 0 + 0 + 1
= 128 + 64 + 16 + 1
32

Subiect · pagina 38

Algoritmi elementari Teorie
= 209
Astfel, rezultatul este:
11010001(2) = 209(10)
Transformare iterativ˘a din baza b ˆın baza 10:
1: Algorithm iterativ(n, b)
2: result ← 0
3: p ← 1
4: While n > 0 execute
5: result ← result + (n MOD 10) ∗ p
6: p ← p ∗ b
7: n ← n DIV 10
8: EndWhile
9: Return result
10: EndAlgorithm
Transformare recursiv˘a din baza b ˆın baza 10:
1: Algorithm recursiv(n, b)
2: If n = 0 then
3: Return 0
4: EndIf
5: Return (n MOD 10) + recursiv(n DIV 10, b) ∗ b
6: EndAlgorithm
Transformarea din baza b ˆın baza d
Pentru transformarea unui num˘ar din baza b ˆın baza d, procesul poate fi realizat ˆın dou˘a
etape principale:
• 1. Conversia num˘arului din baza b ˆın baza 10.
• 2. Conversia rezultatului din baza 10 ˆın baza d.
4.1.2 Conversii rapide
Transform˘arile rapide ˆıntre baze care sunt puteri ale lui 2 (cum ar fi 2, 4, 8 sau 16) se
bazeaz˘a pe gruparea cifrelor binare ˆın subgrupuri specifice. Aceast˘a abordare permite
conversia direct˘a a unui num˘ar din baza 2 ˆın alte baze f˘ar˘a a trece prin baza 10.
1. Conversia din baza 2 ˆın baza 4, 8, sau 16 se realizeaz˘a ˆın urm˘atorul mod:
• Grupare: ˆImp˘art, im num˘arul binar ˆın grupuri de cˆate 2 cifre (pentru baza 4), 3 cifre
(pentru baza 8) sau 4 cifre (pentru baza 16) cifre. Dac˘a num˘arul de cifre binare nu
este multiplu al dimensiunii grupului, se completeaz˘a cu zerouri ˆın partea stˆang˘a.
• Conversie: Fiecare grup de cifre binare se transform˘a direct ˆın cifra corespunz˘atoare
din baza dorit˘a.
Exemplu:
33

Subiect · pagina 39

Algoritmi elementari Teorie
a. Din baza 2 ˆın baza 4:
• Num˘ar: 110101110(2)
• Grupare: 4 = 22:
(01)(10)(10)(11)(10)
• Conversie: 1, 2, 2, 3, 2
• Rezultatul: 12232(4)
b. Din baza 2 ˆın baza 8:
• Num˘ar: 110101110(2)
• Grupare: 8 = 23:
(110)(101)(110)
• Conversie: 6, 5, 6
• Rezultatul: 656(8)
c. Din baza 2 ˆın baza 16:
• Num˘ar: 110101110(2)
• Grupare: 16 = 24:
(0001)(1010)(1110)
• Conversie: 1, A, E
• Rezultatul: 1AE(16)
2. Conversia din baza 4, 8, sau 16 ˆın baza 2:
• Fiecare cifr˘a din baza respectiv˘a se transform˘a ˆın echivalentul s˘au binar, folosind 2
(pentru baza 4), 3 (pentru baza 8) sau 4 (pentru baza 16) cifre binare pentru fiecare
cifr˘a din baza respectiv˘a.
Exemplu:
a. Din baza 4 ˆın baza 2:
• Num˘ar: 10313(4)
• Grupare: 1, 0, 3, 1, 3
• Conversie:
(01)(00)(11)(01)(11)
• Rezultatul: 100110111(2)
b. Din baza 8 ˆın baza 2:
• Num˘ar: 467(8)
• Grupare: 4, 6, 7
• Conversie: (100)(110)(111)
• Rezultatul: 100110111(2)
c. Din baza 16 ˆın baza 2:
• Num˘ar: 137(16)
• Grupare: 1, 3, 7
• Conversie:
(0001)(0011)(0111)
• Rezultatul: 100110111(2)
4.1.3 Divizibilitate
Divizibilitatea se refer˘a la proprietatea unui num˘ar a de a fi ˆımp˘art, it exact la un alt
num˘ar b (notat b | a).
34

Subiect · pagina 40

Algoritmi elementari Teorie
• Divizor: Un num˘ar care ˆımparte exact alt num˘ar, adic˘a restul ˆımp˘art, irii ˆıntregi
este 0. De exemplu, 2 este divizor al lui 8.
• Multiplu: Rezultatul obt, inut prin ˆınmult, irea unui num˘ar ˆıntreg cu alt num˘ar. De
exemplu, 12 este multiplu al lui 3.
• Rest: Num˘arul r˘amas dup˘a ˆımp˘art, ire. De exemplu, restul ˆımp˘art, irii lui 10 la 3
este 1.
Divizorii unui num˘ar
Un num˘ar d este divizor al lui n dac˘a n : d = k, unde k este un num˘ar ˆıntreg. Exemplu:
Pentru n = 12, divizorii sunt 1, 2, 3, 4, 6, 12.
Exemplu 1: Afis, area divizorilor unui
num˘ar
1: Algorithm afisare(n)
2: For d ← 1, n execute
3: If n MOD d = 0 then
4: Write d, ’ ’
5: EndIf
6: EndFor
7: EndAlgorithm
Complexitate: O(n)
Exemplu 2: Afis, area divizorilor unui
num˘ar
1: Algorithm afisare(n)
2: For d ← 1, d ∗ d ≤ n execute
3: If n MOD d = 0 AND d ∗
d < n then
4: Write d, ’ ’, n DIV d, ’ ’
5: Else
6: If d ∗ d = n then
7: Write d
8: EndIf
9: EndIf
10: EndFor
11: EndAlgorithm
Complexitate: O(√n)
Observat, ii importante
• Divizorii unui num˘ar sunt simetrici: dac˘a d este un divizor al lui n, atunci
n DIV d este de asemenea un divizor.
• Numerele care nu sunt p˘atrate perfecte au num˘ar par de divizori.
• Singurele numere cu num˘ar impar de divizori sunt p˘atratele perfecte.
• Cel mai mic divizor propriu al unui num˘ar natural (diferit de 1 s, i de num˘arul
ˆınsus, i) este ˆıntotdeauna un num˘ar prim.
CMMDC (Cel Mai Mare Divizor Comun)
Cel mai mare divizor comun (CMMDC) al dou˘a numere naturale a s, i b este cel mai mare
num˘ar natural care divide atˆat pe a, cˆat s, i pe b. CMMDC al numerelor a s, i b se noteaz˘a
(a, b). Dac˘a (a, b) = 1, spunem c˘a a s, i b sunt prime ˆıntre ele.
Descompunerea ˆın factori primi sau Algoritmul lui Euclid reprezint˘a metode prin care
putem calcula CMMDC.
35

Subiect · pagina 41

Algoritmi elementari Teorie
Algoritmul lui Euclid prin sc˘aderi: Cel mai mare divizor a dou˘a numere divide s, i
diferent, a acestora.
• Dac˘a a = b, CMMDC este a sau b.
• Dac˘a a > b, se ˆınlocuies, te a cu a − b.
• Dac˘a a < b, se ˆınlocuies, te b cu b − a.
• Se repet˘a pas, ii 2 s, i 3 cˆat timp a̸ = b. Rezultatul final va fi CMMDC.
Algoritmul lui Euclid prin sc˘aderi, itera-
tiv
Algorithm iterativ(a, b)
While a̸ = b execute
If a > b then
a ← a − b
Else
b ← b − a
EndIf
EndWhile
Return a
EndAlgorithm
Complexitate: O(min(a, b))
Algoritmul lui Euclid prin sc˘aderi, recur-
siv
Algorithm recursiv(a, b)
If a = b then
Return a
Else
If a > b then
Return recursiv(a − b, b)
Else
Return recursiv(a, b − a)
EndIf
EndIf
EndAlgorithm
Complexitate: O(min(a, b))
Algoritmul lui Euclid prin ˆımp˘art, iri (cu resturi): Cel mai mare divizor a dou˘a
numere divide s, i restul ˆımp˘art, irii acestora, conform teoremei ˆımp˘art, irii cu rest.
• Dac˘a b = 0, CMMDC este a.
• Dac˘a b̸ = 0, calculeaz˘a r = a mod b.
• ˆInlocuies, te a cu b s, i b cu r.
• Repet˘a pas, ii 2-3 cˆat timp b̸ = 0. CMMDC este valoarea final˘a a lui a.
Exemplu: Algoritmul lui Euclid pentru a = 56 s, i b = 42:
Algoritmul lui Euclid prin ˆımp˘art, iri, ite-
rativ
Algorithm iterativ(a, b)
While b > 0 execute
r ← a MOD b
a ← b
b ← r
EndWhile
Return a
EndAlgorithm
Complexitate: O(log(min(a, b)))
Algoritmul lui Euclid prin ˆımp˘art, iri, re-
cursiv
Algorithm recursiv(a, b)
If b = 0 then
Return a
Else
Return recursiv(b, a MOD b)
EndIf
EndAlgorithm
Complexitate: O(log(min(a, b)))
36

Subiect · pagina 42

Algoritmi elementari Teorie
CMMMC (Cel Mai Mic Multiplu Comun)
Cel mai mic multiplu comun (CMMMC) al dou˘a sau mai multe numere ˆıntregi este cel
mai mic num˘ar ˆıntreg pozitiv care este divizibil cu toate numerele respective. Pentru
dou˘a numere a s, i b, CMMMC se calculeaz˘a folosind formula:
CMMMC(a, b) = a · b
CMMDC(a, b) ,
unde CMMDC este cel mai mare divizor comun.
Primalitate
Un num˘ar prim este un num˘ar ˆıntreg pozitiv mai mare decˆat 1 care are exact doi divizori:
1 s, i el ˆınsus, i.
Pentru a verifica algoritmic dac˘a un num˘ar n este prim:
• Presupunem c˘a n este prim.
• Dac˘a n ≤ 1, atunci nu este prim.
• C˘aut˘am un divizor ˆıntre 2 s, i √n.
• Dac˘a n nu este divizibil cu niciunul dintre aceste numere, atunci este prim.
• Dac˘a g˘asim un divizor d, atunci n nu este prim.
Metoda 1: Verificare dac˘a un num˘ar
este prim
1: Algorithm primalitate(n)
2: If n ≤ 1 then
3: Return False
4: EndIf
5: For d ← 2, n − 1 execute
6: If n MOD d = 0 then
7: Return False
8: EndIf
9: EndFor
10: Return True
11: EndAlgorithm
Complexitate: O(n)
Metoda 2: Verificare dac˘a un num˘ar este
prim
1: Algorithm primalitate(n)
2: If n ≤ 1 then
3: Return False
4: EndIf
5: If n MOD 2 = 0 AND n > 2 then
6: Return False
7: EndIf
8: For d ← 3, d ∗ d ≤ n, 2 execute
9: If n MOD d = 0 then
10: Return False
11: EndIf
12: EndFor
13: Return True
14: EndAlgorithm
Complexitate: O(√n)
37

Subiect · pagina 43

Algoritmi elementari Teorie
Observat, ie important˘a
• Putem stabili dac˘a un num˘ar n este prim s, i prin urm˘atoarele feluri:
– Num˘ar˘am divizorii lui n. Dac˘a are exact 2 divizori, atunci n este prim.
– Determin˘am suma divizorilor lui n. Dac˘a suma este egal˘a cu n + 1,
num˘arul este prim.
Descompunerea ˆın factori primi
Descompunerea ˆın factori primi este procesul prin care un num˘ar ˆıntreg pozitiv este
exprimat ca produs de numere prime, posibil ridicate la o putere. De exemplu, num˘arul
60 poate fi descompus ˆın factori primi astfel:
60 = 22 · 31 · 51
Pentru a descompune un num˘ar ˆıntreg pozitiv n ˆın factori primi, se urmeaz˘a pas, ii urm˘atori:
• ˆIncepem cu cel mai mic num˘ar prim, 2.
• ˆImp˘art, im n la 2. Dac˘a n este divizibil cu 2, not˘am 2 ca factor s, i ˆımp˘art, im n cu 2.
• Continu˘am ˆımp˘art, irea lui n la 2 pˆan˘a cˆand n nu mai este divizibil cu 2.
• Trecem la urm˘atorul num˘ar prim (3, 5, 7, etc.) s, i repet˘am procesul pˆan˘a cˆand n
devine egal cu 1.
Descompunerea ˆın factori primi
1: Algorithm factorizare(n)
2: d ← 2
3: While n > 1 execute
4: putere ← 0
5: While n MOD d = 0 execute
6: putere ← putere + 1
7: n ← n DIV d
8: EndWhile
9: If putere > 0 then
10: Write d, ^, putere
11: Write new line
12: EndIf
13: d ← d + 1
14: If d ∗ d > n then
15: d ← n
16: EndIf
17: EndWhile
18: EndAlgorithm
Complexitate: O(√n)
38

Subiect · pagina 44

Algoritmi elementari Teorie
4.1.4 S¸irul lui Fibonacci
S, irurile cu termen general sunt frecvent ˆıntˆalnite ˆın matematic˘a, ˆıns˘a ˆın informatic˘a ele
sunt adesea utilizate pentru implementarea structurilor repetitive sau a programelor re-
cursive. Cu toate acestea, S, irul lui Fibonacci nu este un s, ir oarecare cu termen general,
deoarece al n-lea termen al s˘au este dependent de termenii n − 1 s, i n − 2. Astfel, pentru
S, irul lui Fibonacci, sunt valabile urm˘atoarele preciz˘ari: fiecare termen n este suma terme-
nilor n − 1 s, i n − 2, iar s, irul ˆıncepe cu termenii 0 s, i 1 (unii programatori consider˘a primii
termeni ca fiind 1 s, i 1, dar ambele convent, ii sunt acceptate). ˆIn cele ce urmeaz˘a, vom
considera primul termen al s, irului f0 = 0. Deci, dac˘a fn, n ∈ N este s, irul lui Fibonacci,
avem:
fn =



0, dac˘a n = 0;
1, dac˘a n = 1;
fn−1 + fn−2, dac˘a n ≥ 2.
Astfel, un posibil program care afis, eaz˘a primii n termeni din s, irul lui Fibonacci s, i care
foloses, te un vector este:
S, irul lui Fibonacci folosind un array:
1: Algorithm Fibo(n)
2: f [0] ← 1
3: f [1] ← 1
4: For i ← 2, n − 1 execute
5: f [i] = f [i − 1] + f [i − 2]
6: EndFor
7: For i ← 0, n − 1 execute
8: afis, eaz˘a f [i]
9: EndFor
10: EndAlgorithm
Aceast˘a implementare este una simpl˘a s, i intuitiv˘a, dar nu este cea mai optim˘a din
punct de vedere al complexit˘at, ii spat, iale, deoarece foloses, te un vector de dimensiune
n(complexitatea spat, iu este O(n)). Un algoritm care afis, eaz˘a primii n termeni din s, irul
lui Fibonacci ˆın complexitate spat, iu O(1) ar fi urm˘atorul, care foloses, te doar 3 variabile,
numere naturale:
S, irul lui Fibonacci folosind trei variabile:
1: Algorithm Fibo(n)
2: a ← 1
3: b ← 1
4: Write a, Write b
5: For i ← 2, n − 1 execute
6: aux ← a + b
7: a ← b
8: b ← aux
9: Write aux
10: EndFor
11: EndAlgorithm
39

Subiect · pagina 45

Algoritmi elementari Teorie
Complexitatea de timp pentru afis, area primelor n numere din s, irul lui Fibonacci este
O(n). ˆIns˘a, verificarea dac˘a un num˘ar x este ˆın S, irul lui Fibonacci se poate implementa
ˆın complexitatea de timp O(1), folosind urm˘atoarea proprietate:
x face parte din s, irul Fibonacci ⇔
⇔ 5x2 + 4 este p˘atrat perfect sau 5x2 − 4 este p˘atrat perfect .
4.1.5 Determinare minim/maxim
Determinarea maximului s, i minimului reprezint˘a procesul de identificare a valorii celei
mai mari (maxim) sau celei mai mici (minim) dintr-un set de valori.
Maximul s, i minimul a dou˘a valori
Determinarea minimului unei valori
Algorithm minim(a, b)
If a < b then
Return a
Else
Return b
EndIf
EndAlgorithm
Complexitate: O(1)
Determinarea maximului unei valori
Algorithm maxim(a, b)
If a > b then
Return a
Else
Return b
EndIf
EndAlgorithm
Complexitate: O(1)
Determinarea minimului pentru un num˘ar oarecare de valori
Algoritmul primaValoare va p˘astra ˆın variabila min cu cea mai mic˘a valoare citit˘a (init, ia,
prima valoarea citit˘a), ˆın timp ce valoareMare init, ializeaz˘a variabila min cu o valoare su-
ficient de mare pentru a permite g˘asirea minimului, ambii algoritmi terminˆandu-se cˆand
se introduce valoarea 0.
Variabila min init, ializat˘a cu prima va-
loare citit˘a
1: Algorithm primaValoare
2: Read nr
3: min ← nr
4: Read nr
5: While nr̸ = 0 execute
6: If nr < min then
7: min ← nr
8: EndIf
9: Read nr
10: EndWhile
11: Write min
12: EndAlgorithm
Complexitate: O(n)
Variabila M in init, ializat˘a cu o valoare
mare
1: Algorithm valoareMare
2: min ← ∞
3: Read nr
4: While nr̸ = 0 execute
5: If nr < min then
6: min ← nr
7: EndIf
8: Read nr
9: EndWhile
10: Write min
11: EndAlgorithm
Complexitate: O(n)
40

Subiect · pagina 46

Algoritmi elementari Teorie
Determinarea maximului pentru un num˘ar oarecare de valori
Algoritmul primaValoare actualizeaz˘a variabila max cu prima valoare citit˘a, ˆın timp ce
valoareMica init, ializeaz˘a variabila max cu o valoare suficient de mic˘a pentru a permite
g˘asirea maximului, ambii algoritmi terminˆandu-se cˆand se introduce 0.
Variabila M ax init, ializat˘a cu cea mai
mare valoarea citit˘a
1: Algorithm primaValoare
2: Read nr
3: max ← nr
4: Read nr
5: While nr̸ = 0 execute
6: If nr > max then
7: max ← nr
8: EndIf
9: Read nr
10: EndWhile
11: Write max
12: EndAlgorithm
Complexitate: O(n)
Variabila M ax init, ializat˘a cu o valoarea
mic˘a
1: Algorithm valoareMica
2: max ← −999999
3: Read nr
4: While nr̸ = 0 execute
5: If nr > max then
6: max ← nr
7: EndIf
8: Read nr
9: EndWhile
10: Write max
11: EndAlgorithm
Complexitate: O(n)
4.1.6 C˘aut˘ari pe s, iruri de numere
C˘autarea Secvent¸ial˘a
C˘autarea secvent¸ial˘a (numit˘a s, i c˘autare liniar˘a) presupune parcurgerea element cu ele-
ment a ¸sirului pˆan˘a cˆand fie se g˘ase¸ste elementul c˘autat, fie se ajunge la finalul ¸sirului
f˘ar˘a a g˘asi elementul respectiv. Din punct de vedere al complexit˘at¸ii timp, ˆın cel mai bun
caz (cˆand elementul se afl˘a la ˆınceputul ¸sirului), complexitatea c˘aut˘arii este O(1), ˆıns˘a ˆın
medie ¸si ˆın cel mai r˘au caz, complexitatea va fi O(n), unde n este lungimea ¸sirului.
Exemplu: Presupunem c˘a avem ¸sirul A = [2, 5, 7, 10, 14, 20], iar elementul c˘autat este
10. C˘autarea secvent¸ial˘a va compara ˆın ordine elementele: 2, 5, 7, 10, iar la al patrulea
element g˘ase¸ste valoarea c˘autat˘a. Ilustrarea grafic˘a a c˘aut˘arii lui 10 ˆın A este aceasta:
2 5 7 10 14 20
10̸ = 2
10̸ = 5
10̸ = 7
10 = 10
Consider˘am A - ¸sir de numere, n - dimensiunea ¸sirului s, i x - elementul c˘autat. O imple-
mentare ˆın pseudocod a c˘aut˘arii secvent, iale arat˘a astfel:
41

Subiect · pagina 47

Algoritmi elementari Teorie
C˘autare Secvent¸ial˘a
1: For i = 0, n − 1 execute
2: If A[i] = x then
3: Return i ▷ Return˘am pozit, ia lui x
4: EndIf
5: EndFor
6: Return −1 ▷ x nu a fost g˘asit
C˘autarea Binar˘a
Pentru a putea c˘auta un element ˆıntr-un s, ir folosind C˘autarea Binar˘a, s, irul trebuie
s˘a fie sortat (vezi urm˘atorul capitol referitor la Metode de Sortare). Ideea de baz˘a este
ˆımp˘art¸irea ¸sirului ˆın dou˘a subintervale de dimensiune aproximativ egal˘a. Astfel, la fiecare
pas:
• Se calculeaz˘a indicele mijlocului secvent, ei curente → m;
• Dac˘a A[m] este elementul c˘autat, return˘am m.
• Dac˘a A[m] > x, continu˘am c˘autarea ˆın subsecvent, a stˆang˘a [st, m − 1].
• Dac˘a A[m] < x, continu˘am c˘autarea ˆın subsecvent, a dreapt˘a [m + 1, dr].
C˘autarea binar˘a are o complexitate timp atˆat ˆın cazul mediu, cˆat ¸si ˆın cel mai r˘au caz de
O(log n), unde n este lungimea ¸sirului.
Observat, ie: Complexitatea C˘aut˘arii Binare nu include s, i complexitatea sort˘arii s, irului.
Atunci cˆand ˆıncepem s˘a c˘aut˘am binar un anumit element, s, irul trebuie s˘a fie deja sortat.
Exemplu: Consider˘am acela¸si ¸sir sortat: A = [2, 5, 7, 10, 14, 20], unde vom c˘auta elementul
10.
Pa¸sii sunt urm˘atorii:
• Interval init¸ial: st = 0, dr = 5, m = ⌊(0 + 5)/2⌋ = 2. Avem elementul A[2] = 7;
• Cum 7 < 10, c˘aut˘am ˆın secvent, a [3, 5];
• Avem m = ⌊(3 + 5)/2⌋ = 4 s, i elementul A[4] = 14;
• 14 > 10, deci c˘aut˘am ˆın secvent, a [3, 3];
• m = ⌊(3 + 3)/2⌋ = 3, A[3] = 10 s, i oprim c˘autarea.
Ilustrarea grafic˘a a c˘aut˘arii lui 10 ˆın A este aceasta:
42

Subiect · pagina 48

Algoritmi elementari Teorie
Pasul 1: 2 5 7 10 14 20
st drm
7 < 10 → st = m + 1
Pasul 2: 2 5 7 10 14 20
st drm
14 > 10 → dr = m − 1
Pasul 3: 2 5 7 10 14 20
st
dr
m
10 = 10 → stop
Figura 4.1 C˘autare binar˘a pentru elementul 10
Consider˘am A - ¸sir de numere, n - dimensiunea ¸sirului s, i x - elementul c˘autat. O imple-
mentare ˆın pseudocod a c˘aut˘arii secvent, iale arat˘a astfel:
C˘autare Binara
1: While st ≤ dr execute
2: m ← (st + dr) DIV 2
3: If A[m] = x then
4: Return m
5: Else If A[m] > x then
6: dr ← m − 1
7: Else
8: st ← m + 1
9: EndIf
10: EndWhile
11: Return −1
4.1.7 Interclasarea
Interclasarea este o tehnic˘a fundamental˘a utilizat˘a pentru combinarea a dou˘a secvent, e
sortate ˆıntr-o singur˘a secvent, ˘a sortat˘a. Aceast˘a metod˘a este folosit˘a frecvent ˆın algoritmi
precum sortarea prin interclasare (Merge Sort) sau pentru alte aplicat, ii care presupun
manipularea datelor sortate.
Principiile Interclas˘arii
• Intr˘arile:
– Dou˘a liste sortate (sau secvent, e sortate)
• Ies, irea:
43

Subiect · pagina 49

Algoritmi elementari Teorie
– O singur˘a list˘a sortat˘a obt, inut˘a prin combinarea celor dou˘a liste
• Procesul:
– Compararea elementelor curente din cele dou˘a liste
– Inserarea elementului mai mic ˆın lista final˘a
– Repetarea procesului pˆan˘a la epuizarea ambelor liste
Modelul Matematic al Interclas˘arii
Consider˘am dou˘a liste sortate A = {a1, a2, . . . , am} s, i B = {b1, b2, . . . , bn}. Interclasarea
produce o list˘a C = {c1, c2, . . . , cm+n} astfel ˆıncˆat C este de asemenea sortat˘a:
C = Merge(A, B)
Algoritmul pentru Interclasare
Algoritmul de Interclasare
1: Algorithm Merge(A, B)
2: i ← 1, j ← 1, k ← 1
3: C ← list˘a goal˘a
4: While i ≤ |A| && j ≤ |B| execute ▷ S-a folosit |A| = lungimea s, irului A
5: If A[i] ≤ B[j] then
6: C[k] ← A[i]
7: i ← i + 1
8: Else
9: C[k] ← B[j]
10: j ← j + 1
11: EndIf
12: k ← k + 1
13: EndWhile
14: While i ≤ |A| execute
15: C[k] ← A[i]
16: i ← i + 1, k ← k + 1
17: EndWhile
18: While j ≤ |B| execute
19: C[k] ← B[j]
20: j ← j + 1, k ← k + 1
21: EndWhile
22: Return C
23: EndAlgorithm
Complexitatea Algoritmului
• Complexitatea temporal˘a: O(m + n), unde m s, i n sunt dimensiunile celor dou˘a
liste de intrare. Acest lucru rezult˘a din faptul c˘a fiecare element este comparat s, i
inserat o singur˘a dat˘a.
• Complexitatea spat, ial˘a: O(m + n) pentru stocarea listei rezultate.
44

Subiect · pagina 50

Algoritmi elementari Teorie
Aplicat, ii
• Sortarea prin interclasare:
– Algoritmul Merge Sort utilizeaz˘a interclasarea pentru a combina subsecvent, e
sortate.
• ˆImbinarea datelor sortate:
– Utilizat ˆın baze de date s, i fluxuri de date mari pentru a uni seturi sortate.
4.1.8 Metode de sortare
Ce sunt metodele de sortare?
Metodele de sortare ne ajut˘a s˘a aducem elementele unui tablou unidimensional (vector)
ˆıntr-o ordine cresc˘atoare sau descresc˘atoare. Exist˘a mai multe metode de a realiza
acest lucru, iar diferent, a major˘a care ne va determina s˘a alegem o anumit˘a metod˘a va
fi cu sigurant, ˘a complexitatea timp a metodei. Atunci cˆand proces˘am un s, ir cu o
lungime imens˘a, suntem interesat, i ca operat, ia de sortare s˘a fie f˘acut˘a cˆat mai eficient
din punct de vedere al timpului de execut, ie. ˆIn cele ce urmeaz˘a, vom prezenta cele mai
ˆıntˆalnite metode de sortare ˆın Informatica de liceu, iar la finalul prezent˘arii vom face o
scurt˘a comparat, ie ˆıntre eficient, a acestora.
Metoda Bubble Sort
Bubble Sort este un algoritm de sortare care parcurge ˆın mod repetat un s, ir de numere,
comparˆand perechi de elemente adiacente s, i interschimbˆandu-le dac˘a sunt ˆın ordinea
gres, it˘a fat, ˘a de cum ne dorim s˘a sort˘am s, irul (cresc˘ator/descresc˘ator). Procesul continu˘a
pˆan˘a cˆand s, irul este complet ordonat, adic˘a nu mai sunt necesare interschimb˘ari.
Exemplu: Vom sorta s, irul [5, 1, 4, 2, 8] cresc˘ator, folosind metoda Bubble Sort:
• Iterat, ia 1:
– Compar˘am 5 s, i 1: 5 > 1, interschimb˘am → {1, 5, 4, 2, 8}
– Compar˘am 5 s, i 4: 5 > 4, interschimb˘am → {1, 4, 5, 2, 8}
– Compar˘am 5 s, i 2: 5 > 2, interschimb˘am → {1, 4, 2, 5, 8}
– Compar˘am 5 s, i 8: 5 < 8, nu interschimb˘am.
• Iterat, ia 2:
– Compar˘am 1 s, i 4: 1 < 4, nu interschimb˘am.
– Compar˘am 4 s, i 2: 4 > 2, interschimb˘am → {1, 2, 4, 5, 8}
– Compar˘am 4 s, i 5: 4 < 5, nu interschimb˘am.
– Compar˘am 5 s, i 8: 5 < 8, nu interschimb˘am.
• Iterat, ia 3:
– Compar˘am 1 s, i 2: 1 < 2, nu interschimb˘am.
– Compar˘am 2 s, i 4: 2 < 4, nu interschimb˘am.
– Compar˘am 4 s, i 5: 4 < 5, nu interschimb˘am.
45

Subiect · pagina 51

Algoritmi elementari Teorie
La finalul execut, iei, obt, inem s, irul sortat cresc˘ator: {1, 2, 4, 5, 8}. O ilustrare grafic˘a a
rezultatelor ˆın urma celor 3 iterat, ii se reg˘ases, te mai jos:
5 1 4 2 8
1 5 4 2 8
1 4 5 2 8
1 2 4 5 8
Iterat, ia 1:
Iterat, ia 2:
Iterat, ia 3:
Final:
Figura 4.2 Sortare cu metoda Bubble Sort
O implementare a algoritmului ˆın pseudocod arat˘a astfel:
Bubble Sort
1: Do
2: ok ← True
3: For i ← 1, n − 1 execute
4: If A[i] > A[i + 1] then
5: Swap(A[i], A[i + 1])
6: ok ← False
7: EndIf
8: EndFor
9: While NOT ok
Complexitate timp: O(n2) ˆın cel mai r˘au caz, O(n) ˆın cel mai bun caz.
Metoda Selection Sort
Sortarea prin metoda Selection Sort funct, ioneaz˘a prin g˘asirea ˆın mod repetat a elemen-
tului minim din vectorul nesortat s, i mutarea lui pe pozit, ia corespunz˘atoare ˆın vectorul
sortat.
Exemplu: Vom sorta s, irul {29, 10, 14, 37, 13} folosind Selection Sort:
• Iterat, ia 1:
– G˘asim minimul ˆın {29, 10, 14, 37, 13}, care este 10.
– Interschimb˘am 29 cu 10 → {10, 29, 14, 37, 13}.
• Iterat, ia 2:
– G˘asim minimul ˆın {29, 14, 37, 13}, care este 13.
– Interschimb˘am 29 cu 13 → {10, 13, 14, 37, 29}.
46

Subiect · pagina 52

Algoritmi elementari Teorie
• Iterat, ia 3:
– G˘asim minimul ˆın {14, 37, 29}, care este 14.
– Cum 14 este deja la locul s˘au, nu interschimb˘am.
• Iterat, ia 4:
– G˘asim minimul ˆın {37, 29}, care este 29.
– Interschimb˘am 37 cu 29 → {10, 13, 14, 29, 37}.
Cum s, irul este sortat, algoritmul se opres, te ˆın acest punct. O reprezentare grafic˘a a
pas, ilor se reg˘ases, te mai jos:
29 10 14 37 13
10 29 14 37 13
10 13 14 37 29
10 13 14 37 29
10 13 14 29 37
Iterat, ia 1:
Iterat, ia 2:
Iterat, ia 3:
Iterat, ia 4:
Final:
Figura 4.3 Sortare cu metoda Selection Sort
O implementare a algoritmului ˆın pseudocod arat˘a astfel:
Selection Sort
1: For i ← 1, n − 1 execute
2: min ← i
3: For j ← i + 1, n execute
4: If A[j] < A[min] then
5: min ← j
6: EndIf
7: EndFor
8: If min̸ = i then
9: Swap(A[i], A[min])
10: EndIf
11: EndFor
Complexitate: O(n2), atˆat ˆın cel mai bun, cˆat s, i ˆın cel mai r˘au caz.
47

Subiect · pagina 53

Algoritmi elementari Teorie
Metoda Insertion Sort
Insertion Sort este un algoritm de sortare simplu s, i eficient pentru seturi mici de date.
Funct, ioneaz˘a pe principiul construirii treptate a s, irului sortat, inserˆand fiecare element ˆın
pozit, ia corect˘a. Algoritmul parcurge s, irul de la stˆanga la dreapta s, i la fiecare pas, mut˘a
elementul curent ˆın pozit, ia corespunz˘atoare fat, ˘a de elementele deja sortate din partea
stˆang˘a a s, irului.
Exemplu: Vom sorta s, irul {12, 11, 13, 5, 6} folosind metoda Insertion Sort:
• Iterat, ia 1:
– Element curent: 11
– Compar˘am cu 12, deoarece 11 < 12, mut˘am 12 o pozit, ie la dreapta.
– Inser˘am 11 pe pozit, ia 1.
– S, irul devine: {11, 12, 13, 5, 6}
• Iterat, ia 2:
– Element curent: 13
– Compar˘am cu 12, deoarece 13 ≥ 12, nu facem modific˘ari.
– S, irul r˘amˆane: {11, 12, 13, 5, 6}
• Iterat, ia 3:
– Element curent: 5
– Compar˘am cu 13, 5 < 13, mut˘am 13 la dreapta.
– Compar˘am cu 12, 5 < 12, mut˘am 12 la dreapta.
– Compar˘am cu 11, 5 < 11, mut˘am 11 la dreapta.
– Inser˘am 5 pe pozit, ia 0.
– S, irul devine: {5, 11, 12, 13, 6}
• Iterat, ia 4:
– Element curent: 6
– Compar˘am cu 13, 6 < 13, mut˘am 13 la dreapta.
– Compar˘am cu 12, 6 < 12, mut˘am 12 la dreapta.
– Compar˘am cu 11, 6 < 11, mut˘am 11 la dreapta.
– Compar˘am cu 5, 6 ≥ 5, inser˘am 6 pe pozit, ia 1.
– S, irul devine: {5, 6, 11, 12, 13}
La finalul execut, iei, obt, inem s, irul sortat: {5, 6, 11, 12, 13}. O ilustrare grafic˘a a pas, ilor
algoritmului este prezentat˘a mai jos:
48

Subiect · pagina 54

Algoritmi elementari Teorie
Iterat, ia 1: 12 11 13 5 6 → 11 12 13 5 6
Iterat, ia 2: 11 12 13 5 6 → 11 12 13 5 6
Iterat, ia 3: 11 12 13 5 6 → 5 11 12 13 6
Iterat, ia 4: 5 11 12 13 6 → 5 6 11 12 13
Figura 4.4 Sortare cu metoda Insertion Sort
O implementare a algoritmului ˆın pseudocod arat˘a astfel:
Insertion Sort
1: For i ← 1 to n − 1 execute
2: key ← A[i]
3: j ← i − 1
4: While j ≥ 0 and A[j] > key execute
5: A[j + 1] ← A[j]
6: j ← j − 1
7: EndWhile
8: A[j + 1] ← key
9: EndFor
Complexitate: O(n2), atˆat ˆın cel mai bun, cˆat s, i ˆın cel mai r˘au caz.
Metoda Quick Sort
Quick Sort este un algoritm de sortare care utilizeaz˘a strategia ”Divide et Impera”. Algo-
ritmul funct, ioneaz˘a prin selectarea unui element numit ”pivot” s, i divizarea s, irului astfel
ˆıncˆat toate elementele mai mici decˆat pivotul s˘a fie plasate ˆınaintea acestuia, iar cele mai
mari dup˘a el. Acest proces se repet˘a recursiv pentru subs, irurile rezultate pˆan˘a cˆand s, irul
este complet sortat.
Exemplu: Vom sorta s, irul {33, 10, 55, 71, 29, 3, 18} folosind metoda Quick Sort:
• Pasul 1:
– Alegem pivotul: 33.
– Diviz˘am s, irul ˆın funct, ie de pivot:
∗ Elemente mai mici decˆat 33: {10, 29, 3, 18}
∗ Pivot: {33}
∗ Elemente mai mari decˆat 33: {55, 71}
• Pasul 2: Aplic˘am recursiv Quick Sort pe subs, irurile rezultate.
49

Subiect · pagina 55

Algoritmi elementari Teorie
– Sort˘am {10, 29, 3, 18}
∗ Pivot: 10
∗ Elemente mai mici: {3}
∗ Elemente mai mari: {29, 18}
– Sort˘am {3} (deja sortat)
– Sort˘am {29, 18}
∗ Pivot: 29
∗ Elemente mai mici: {18}
∗ Elemente mai mari: {}
• Pasul 3: Reunim subs, irurile sortate.
– Subs, irul stˆang sortat: {3, 10, 18, 29}
– Pivotul init, ial: {33}
– Sort˘am {55, 71}
∗ Pivot: 55
∗ Elemente mai mici: {}
∗ Elemente mai mari: {71}
– Subs, irul drept sortat: {55, 71}
La final, obt, inem s, irul sortat: {3, 10, 18, 29, 33, 55, 71}. O ilustrare grafic˘a a procesului
este prezentat˘a mai jos:
33
{33}
10
{3, 10, 18, 29}
3
{3}
29
{18, 29}
18
{18} ∅
55
{55, 71}
∅ 71
{71}
Figura 4.5 Sortare cu metoda Quick Sort
O implementare a algoritmului ˆın pseudocod arat˘a astfel:
50

Subiect · pagina 56

Algoritmi elementari Teorie
Quick Sort
1: Algorithm QuickSort(A, low, high)
2: If low < high then
3: pivot index ← Partition(A, low, high)
4: QuickSort(A, low, pivot index − 1)
5: QuickSort(A, pivot index + 1, high)
6: EndIf
7: EndAlgorithm
8: Algorithm Partition(A, low, high)
9: pivot ← A[high]
10: i ← low − 1
11: For j ← low to high − 1 execute
12: If A[j] ≤ pivot then
13: i ← i + 1
14: Swap(A[i], A[j])
15: EndIf
16: EndFor
17: Swap(A[i + 1], A[high])
18: Return i + 1
19: EndAlgorithm
Complexitate timp:
• Caz mediu: O(n log n)
• Cazul cel mai r˘au: O(n2) (dac˘a s, irul este deja sortat invers sau pivotul ales este
mereu cel mai mic/mare element)
Metoda Merge Sort
Merge Sort este, de asemenea, un algoritm care utilizeaz˘a ”Divide et Impera”. Spre
deosebire de Quick Sort, Merge Sort ˆımparte ˆın mod recursiv s, irul ˆın jum˘at˘at, i pˆan˘a cˆand
ajunge la subs, iruri de un singur element, apoi le ˆımbin˘a (merge) ˆıntr-un mod ordonat
pentru a obt, ine s, irul sortat final.
Exemplu: Vom sorta s, irul {38, 27, 43, 3, 9, 82, 10} folosind metoda Merge Sort:
• Pasul 1: Diviz˘am recursiv s, irul pˆan˘a la subs, iruri de un element:
– S, irul init, ial: {38, 27, 43, 3, 9, 82, 10};
– ˆImp˘art, im ˆın dou˘a: {38, 27, 43} s, i {3, 9, 82, 10};
– Continu˘am ˆımp˘art, irea:
∗ {38, 27, 43} → {38}, {27, 43} → {27}, {43};
∗ {3, 9, 82, 10} → {3, 9}, {82, 10} → {3}, {9}, {82}, {10}.
• Pasul 2: ˆImbin˘am subs, irurile ˆıntr-un mod ordonat:
– ˆImbin˘am {27} s, i {43} → {27, 43};
– ˆImbin˘am {38} s, i {27, 43} → {27, 38, 43};
– ˆImbin˘am {3} s, i {9} → {3, 9};
51

Subiect · pagina 57

Algoritmi elementari Teorie
– ˆImbin˘am {82} s, i {10} → {10, 82};
– ˆImbin˘am {3, 9} s, i {10, 82} → {3, 9, 10, 82}.
• Pasul 3: ˆImbin˘am cele dou˘a subs, iruri sortate:
– ˆImbin˘am {27, 38, 43} s, i {3, 9, 10, 82} → {3, 9, 10, 27, 38, 43, 82}.
La final, obt, inem s, irul sortat: {3, 9, 10, 27, 38, 43, 82}. Diagrama de mai jos ilustreaz˘a
procesul:
{38, 27, 43, 3, 9, 82, 10}
{38, 27, 43}
{38} {27, 43}
{27} {43}
{3, 9, 82, 10}
{3, 9}
{3} {9}
{82, 10}
{82} {10}
Figura 4.6 Divizarea s, irului ˆın Merge Sort
{3, 9, 10, 27, 38, 43, 82}
{27, 38, 43}
{38} {27, 43}
{27} {43}
{3, 9, 10, 82}
{3, 9}
{3} {9}
{10, 82}
{10} {82}
Figura 4.7 ˆImbinarea subs, irurilor ˆın Merge Sort
O implementare a algoritmului ˆın pseudocod arat˘a astfel:
Merge Sort
1: Algorithm MergeSort(A, lef t, right)
2: If lef t < right then
3: mid ← ⌊(lef t + right)/2⌋
4: MergeSort(A, lef t, mid)
5: MergeSort(A, mid + 1, right)
6: Merge(A, lef t, mid, right) ▷ Definit˘a la capitolul interclasare
7: EndIf
8: EndAlgorithm
Complexitate timp: O(n log n) ˆın toate cazurile, datorit˘a diviz˘arii s, i ˆımbin˘arii constante
a subs, irurilor.
52

Subiect · pagina 58

Algoritmi elementari Probleme
Comparat, ie ˆıntre metodele de sortare
Pˆan˘a acum am prezentat multiple metode de sortare, iar acum a venit timpul s˘a punem
urm˘atoarea problem˘a: Pe care dintre ele este cel mai bine s˘a o utiliz˘am? R˘aspunsul se
bazeaz˘a foarte mult pe analiza complexit˘at, ilor acestora, explicate ˆın urm˘atorul capitol.
Pe scurt, complexit˘at, ile sort˘arilor arat˘a astfel:
Algoritm Cazul mediu Cazul cel mai r˘au
Bubble Sort O(n2) O(n2)
Selection Sort O(n2) O(n2)
Insertion Sort O(n2) O(n2)
Quick Sort O(n log n) O(n2)
Merge Sort O(n log n) O(n log n)
Tabela 4.1 Comparat, ie algoritmi de sortare
Avˆand ˆın vedere comparat, ia de mai sus, observ˘am c˘a algoritmul Merge Sort este cel mai
stabil s, i eficient din punct de vedere al complexit˘at, ii. As, adar, atunci cˆand ne dorim s˘a
sort˘am un s, ir de numere cˆat mai eficient, putem folosi cu certitudine Merge Sort.
4.2 Probleme
67. ✓ ?Care este rezultatul conversiei num˘arului binar 1010101100 ˆın baza 8?
A. 684
B. 1254
C. 1002
D. Niciunul din r˘aspunsurile A., B., C.
68. ✓ ?Care este rezultatul conversiei num˘arului zecimal 24 + 26 + 210 − 3 ˆın baza 2?
A. 10001001101
B. 1101
C. 10001010000
D. Niciunul dintre r˘aspunsurile A., B., C.
69. ✓ ?Fie expresia E = 10(16) − 10(15) + 10(14) − 10(13) + · · · + 10(2), unde notat, ia x(b)
semnific˘a num˘arul x scris ˆın baza b. Care valoare corespunde expresiei E?
A. 0 B. 1001(2) C. 11(8) D. 9(16)
70. ✓ ?Se consider˘a algoritmul ceFace(arr, n), unde n este un num˘ar natural nenul (1 ≤
n ≤ 104) s, i arr este un s, ir de numere ˆıntregi cu n elemente (−106 ≤ arr[1], arr[2], . . . ,
arr[n] ≤ 106).
53

Subiect · pagina 59

Algoritmi elementari Probleme
Algorithm ceFace(arr, n)
c ← arr[1]
For i ← 2, n execute
dup ← false
For j ← 1, i − 1 execute
If arr[i] = arr[j] then
dup ← true
EndIf
EndFor
If NOT dup then
If arr[i] < c then
c ← arr[i]
EndIf
EndIf
EndFor
Return c
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru apelul ceFace([7, 3, 3, 4,
8], 5) algoritmul returneaz˘a 4.
B. Algoritmul ceFace(arr, n) deter-
min˘a elementul minim din vectorul
arr.
C. Algoritmul ceFace(arr, n) deter-
min˘a elementul maxim din vectorul
arr.
D. Dac˘a toate elementele din s, irul arr
sunt egale, algoritmul ceFace(arr,
n) returneaz˘a oricare dintre aceste ele-
mente.
71. ✓ ?Se consider˘a algoritmii ceFace1(x) s, i ceFace2(x) definit, i al˘aturat, unde x este un
num˘ar ˆıntreg, cel mult 109.
Algorithm ceFace1(x)
While x > 9 execute
s ← 0
While x > 0 execute
s ← s + x MOD 10
x ← [x DIV 10]
EndWhile
x ← s
EndWhile
Return x
EndAlgorithm
Algorithm ceFace2(x)
If x = 0 OR x MOD 9 = 0 then
Return 0
Else
Return x MOD 9
EndIf
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul ceFace1(x) returneaz˘a suma cifrelor lui x;
B. Algoritmul ceFace2(x) returneaz˘a ˆıntotdeauna restul ˆımp˘art, irii lui x la 9;
C. Algoritmii ceFace1(x) s, i ceFace2(x) vor returna mereu aceeas, i valoare ∀x;
D. Algoritmul ceFace1(x) returneaz˘a cifra de control a num˘arului x.
72. ✓ ?Precizat, i care dintre urm˘atoarele afirmat, ii referitoare la egalitatea unor valori ˆın
diferite baze de numerat, ie sunt adev˘arate, unde x(b) semnific˘a num˘arul x scris ˆın baza
b.
A. 1010101(2) = 85(10)
B. 11100100011011111010(2) = E46F A(16)
C. 21030010121110(3) = 7203543(9)
D. 1234(8) = 1010011100(2)
54

Subiect · pagina 60

Algoritmi elementari Probleme
73. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural (0 ≤ n ≤ 104).
Algorithm ceFace(n)
If n = 1 then
Return False
EndIf
If n = 2 then
Return True
EndIf
If n MOD 2 = 0 AND n ≥ 4 then
Return False
EndIf
For index ← 3, index * index ≤ n
execute
If n MOD index = 0 then
Return False
EndIf
EndFor
Return True
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. ˆIn cazul apelului ceFace(21), algorit-
mul returneaz˘a True.
B. Algoritmul returneaz˘a False pentru
toate valorile pare diferite de 2.
C. Algoritmul returneaz˘a True dac˘a s, i
numai dac˘a num˘arul n este prim, False
altfel.
D. Exist˘a exact 5 numere cu proprieta-
tea c˘a n ≤ 10, pentru care apelul
ceFace(n) returneaz˘a True.
74. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
109):
Algorithm ceFace(n)
top ← 0
While n > 0 execute
If n MOD 6 = 0 then
top ← top + 1
EndIf
n ← n DIV 6
EndWhile
Return top
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru n = 1302, algoritmul retur-
neaz˘a valoarea 3.
B. Pentru n = 216, algoritmul returneaz˘a
valoarea 2.
C. Dac˘a n este un num˘ar par, algoritmul
returneaz˘a o valoare impar˘a.
D. Algoritmul returneaz˘a num˘arul de ci-
fre de 0 din reprezentarea ˆın baza 6 a
num˘arului n.
75. ✓ ?Se consider˘a 3 numere ˆın diferite baze de numerat, ie: x = 429 ˆın baza 10, y = 1AD ˆın
baza 16 s, i z = 110101100 ˆın baza 2. Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. x = y s, i y̸ = z. B. x = y = z. C. x̸ = y s, i y̸ = z. D. x̸ = y s, i y = z.
76. ✓ ?Se consider˘a subalgoritmul ceFace() definit al˘aturat. S¸irul a de lungime n este
citit de la tastatur˘a, iar ¸sirul sp este init¸ializat cu 0. Funct¸ia max(a, b) returneaz˘a
maximul dintre numerele a ¸si b. Vectorii sunt indexat, i de la 0.
55

Subiect · pagina 61

Algoritmi elementari Probleme
Algorithm ceFace()
c ← a[0]
sp[0] ← a[0]
If c < 0 then
c ← 0
EndIf
For i ← 1, n − 1 execute
c ← c + a[i]
sp[i] ← max(sp[i − 1], c)
If c < 0 then
c ← 0
EndIf
EndFor
c ← a[n − 1]
b ← a[n − 1]
If c < 0 then
c ← 0
EndIf
d ← b + sp[n − 2]
For i ← n − 2 to 1, −1 execute
c ← c + a[i]
If b < c then
b ← c
EndIf
If c < 0 then
c ← 0
EndIf
d ← max(d, b + sp[i − 1])
EndFor
Output d
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Subalgoritmul ceFace determin˘a
suma maxim˘a posibil˘a care se poate
obt, ine din dou˘a secvent, e oarecare din
¸sirul a.
B. Subalgoritmul ceFace determin˘a
suma maxim˘a posibil˘a care se poate
obt, ine din dou˘a secvent, e care nu au
niciun element comun din ¸sirul a.
C. Subalgoritmul ceFace determin˘a
secvent, a de lungime maxim˘a s, i sum˘a
maxim˘a din ¸sirul a.
D. Subalgoritmul ceFace determin˘a
num˘arul de secvent, e cu sum˘a s, i
lungimea maxim˘a din ¸sirul a.
77. ✓ ?Se consider˘a algoritmul ceFace(arr, n, i), unde n s, i i sunt numere naturale nenule
(1 ≤ n ≤ 104, 1 ≤ i ≤ n) s, i arr este un s, ir de numere ˆıntregi cu n elemente (−106 ≤
arr[1], arr[2], . . . , arr[n] ≤ 106).
Algorithm ceFace(arr, n, i)
If i = n then
Return arr[i]
EndIf
m ← ceFace(arr, n, i + 1)
If arr[i] > m then
m ← arr[i]
EndIf
Return m
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate referitoare la algoritmul ceFace(arr,
n, i)?
A. Pentru apelul ceFace([10, -3, 7, 5, -11, 12, 6, 0], 8, 1) algoritmul re-
turneaz˘a -11.
B. Pentru apelul ceFace([10, -3, 7, 5, -11, 12, 6, 0], 8, 1) algoritmul re-
turneaz˘a 12.
56

Subiect · pagina 62

Algoritmi elementari Probleme
C. Pentru apelul ceFace([5, -4, 3, -2, 1], 5, 2) algoritmul returneaz˘a 5.
D. Algoritmul ceFace(arr, n, i) determin˘a maximul din ˆıntregul vector arr.
78. ✓ ?Se consider˘a algoritmul special(v, n, k), unde n s, i v sunt dou˘a numere naturale
(1 ≤ n ≤ 104, 1 ≤ k ≤ 9), iar v este un s, ir de numere naturale cu n elemente
(v[1], v[2], . . . , v[n]).
Algorithm special(v, n, k)
If n = 0 then
Return 0
EndIf
Return ((v[n] DIV 10 − v[n] MOD 10 ∗ 2) MOD k = 0) + special(v, n − 1, k)
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru apelul special([11, 33, 36, 44, 66, 67], 6, 3) algoritmul returneaz˘a 3.
B. Pentru apelul special([28, 70, 30, 35], 4, 7) algoritmul returneaz˘a 3.
C. Algoritmul special(v, n, k) calculeaz˘a s, i returneaz˘a cˆate numere sunt divizibile
cu k ˆın vectorul v.
D. Pentru apelurile special([21, 15, 6, 8, 49], 5, 7) s, i special([77, 147, 5, 16, 25],
5, 7) algoritmul returneaz˘a ˆın ambele cazuri o valoare par˘a.
79. ✓ ?Se consider˘a algoritmul taste(arr, n), unde n este un num˘ar natural nenul (1 ≤
n ≤ 104), iar arr este un s, ir de numere naturale cu n elemente (1 ≤ arr[1], arr[2], . . . ,
arr[n] ≤ 106).
Algorithm taste(arr, n)
If n = 0 then
Return 0
EndIf
p ← true
If arr[n] ≤ 1 then
p ← false
EndIf
For j ← 2 to j * j ≤ arr[n] execute
If arr[n] MOD j = 0 then
p ← false
EndIf
EndFor
If p then
Return taste(arr, n - 1)
EndIf
Return arr[n] + taste(arr, n - 1)
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Algoritmul taste(arr, n) retur-
neaz˘a suma numerelor prime din
vectorul arr.
B. Pentru apelul taste([3, 8, 9,
13, 15, 21, 23, 24], 8) algo-
ritmul returneaz˘a 39.
C. Pentru apelul taste([1, 5, 6,
9, 11, 16, 17, 19, 20], 9)
algoritmul returneaz˘a 52.
D. Algoritmul taste(arr, n) retur-
neaz˘a 0 dac˘a niciun element din
vectorul arr nu este prim.
80. ✓ ?Se consider˘a algoritmul extra(n), unde n este un num˘ar natural nenul (1 ≤ n ≤ 109).
57

Subiect · pagina 63

Algoritmi elementari Probleme
Algorithm extra(n)
If n > 0 then
Write n MOD 2
extra(n DIV 2)
EndIf
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru n = 73, algoritmul afis, eaz˘a 1001001.
B. Pentru n = 21, algoritmul afis, eaz˘a 10101.
C. Algoritmul afis, eaz˘a reprezentarea num˘arului n
ˆın baza 2.
D. Algoritmul are complexitate logaritmic˘a.
81. ✓ ?Se consider˘a algoritmul ceFace(arr, n), unde n este un num˘ar natural nenul (2 ≤
n ≤ 104), iar arr este un s, ir de numere ˆıntregi cu n elemente (−104 ≤ arr[1], arr[2], . . . ,
arr[n] ≤ 104).
Algorithm ceFace(arr, n)
a ← 10001
b ← −10001
For i ← 2 to n execute
If arr[i] > arr[1] AND arr[i] < a then
a ← arr[i]
EndIf
If arr[i] < arr[1] AND arr[i] > b then
b ← arr[i]
EndIf
EndFor
If a = 10001 OR b = −10001 then
Return arr[1]
Else
Return a + b
EndIf
EndAlgorithm
Pentru care dintre urm˘atoarele ape-
luri ale algoritmului ceFace(arr, n)
algoritmul returneaz˘a valoarea 31?
A. ceFace([31, 31, 31, 31,
31], 5)
B. ceFace([31, -21, -11, -1,
32, -5, 49], 7)
C. ceFace([18, 20, 5, 6], 4)
D. ceFace([15, 17, 5, 49, 37,
14], 6)
82. ✓ ?Se consider˘a algoritmul ceFace(a, b), unde a s, i b sunt numere naturale pozitive
(1 ≤ a ≤ b ≤ 109).
58

Subiect · pagina 64

Algoritmi elementari Probleme
Algorithm ceFace(a, b)
k ← 0
m ← 109
M ← 0
For i ← a, b execute
x ← 1
nr ← 0
d ← 2
cn ← i
While cn > 1 AND d * d ≤ cn execute
nr ← 0
If cn MOD d = 0 then
While cn MOD d = 0 execute
cn ← cn DIV d
nr ← nr + 1
EndWhile
x ← x * (nr + 1)
EndIf
d ← d + 1
EndWhile
If cn > 1 then
x ← x * 2
EndIf
If x > M then
M ← x
m ← i
k ← 1
Else
If x = M then
k ← k + 1
EndIf
EndIf
EndFor
Write m, M , k
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii
sunt adev˘arate?
A. Pentru apelul ceFace(200,
200), algoritmul afi¸seaz˘a va-
lorile 200 10 1.
B. Pentru apelul ceFace(2,
10), algoritmul afi¸seaz˘a
valorile 6 4 3.
C. Algoritmul ceFace(a, b)
determin˘a s, i afi¸seaz˘a cel mai
mic num˘ar din intervalul
[a, b] cu num˘ar maxim de
divizori, num˘arul de divizori
al acestuia s, i num˘arul de nu-
mere cu aceast˘a proprietate.
D. Algoritmul ceFace(a, b)
determin˘a s, i afi¸seaz˘a cel
mai mic num˘ar din interva-
lul [a, b] cu num˘ar maxim
de factori primi distinct, i,
num˘arul acestora s, i num˘arul
de numere care au aceast˘a
proprietate.
83. ✓ ?Care ar putea fi elementele unui vector astfel ˆıncˆat, aplicˆand metoda c˘aut˘arii binare
pentru valoarea 64, aceasta s˘a fie comparat˘a succesiv cu valorile 36, 45, 64?
A. [4, 7, 9, 15, 36, 40, 42, 45, 64, 67]
B. [2, 4, 7, 12, 24, 36, 50]
C. [12, 24, 36, 42, 54, 66]
D. [4, 8, 9, 36, 16, 45, 64]
84. ✓ ?Fie expresia E = AB(16) + 120(3) − 120(4), unde notat, ia x(b) semnific˘a num˘arul x
scris ˆın baza b. Care valoare corespunde expresiei E?
A. 162(10); B. 278(8); C. 1000101(2); D. 242(8).
85. ✓ ?Se consider˘a algoritmul dificil(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
106).
59

Subiect · pagina 65

Algoritmi elementari Probleme
Algorithm dificil(n)
k ← 0
nr ← 0
For index ← 1 to n execute
nr ← index
While nr > 0 execute
k ← k + (nr MOD 2)
nr ← nr DIV 2
EndWhile
EndFor
Return k
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru n = 509, algoritmul returneaz˘a
2287.
B. Pentru n = 1025, algoritmul retur-
neaz˘a 5123.
C. Pentru n = 120, algoritmul returneaz˘a
406.
D. Algoritmul dificil(n) calculeaz˘a s, i
returneaz˘a num˘arul total de cifre de
1 din reprezentarea binar˘a a tuturor
numerelor de la 1 pˆan˘a la n.
86. ✓ ?Se consider˘a algoritmul indigo(n), unde n este un num˘ar natural (1 ≤ n ≤ 106).
Algorithm indigo(n)
cnt ← 0
For i ← 2, i * i ≤ n execute
If n MOD i = 0 then
cnt ← cnt + 1
While n MOD i = 0 execute
n ← n DIV i
EndWhile
EndIf
EndFor
If n > 1 then
cnt ← cnt + 1
EndIf
Return cnt
EndAlgorithm
Care dintre urm˘atoarele apeluri ale al-
goritmului indigo(n) returneaz˘a va-
loarea 3?
A. indigo(120)
B. indigo(9016)
C. indigo(630)
D. indigo(8064)
87. ✓ ?Se consider˘a algoritmul lambda(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
109).
Algorithm lambda(n)
If n < 10 then
Return n
EndIf
b ← lambda(n DIV 10)
a ← n MOD 10
If a MOD 4 > b MOD 4
then
Return a
EndIf
Return b
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate re-
feritoare la algoritmul lambda(n)?
A. Pentru apelul lambda(12569) algoritmul retur-
neaz˘a 2.
B. Pentru apelul lambda(783031) algoritmul re-
turneaz˘a 8.
C. Pentru apelurile lambda(2024) s, i
lambda(2025) algoritmul returneaz˘a aceeas, i
valoare.
D. Algoritmul lambda(n) returneaz˘a prima cifr˘a
divizibil˘a cu 4 din reprezentarea num˘arului n.
88. ✓ ?Se consider˘a algoritmul book(n), unde n este un num˘ar natural nenul (1 ≤ n ≤ 109).
60

Subiect · pagina 66

Algoritmi elementari Probleme
Algorithm book(n)
If n < 10 then
x ← n MOD 3
y ← n MOD 2
If x = 0 AND y̸ = 0 then
Return n
Else
Return -1
EndIf
EndIf
u ← n MOD 10
v ← n DIV 10
p ← book(v)
t ← u MOD 3
q ← u MOD 2
z ← p
If t = 0 AND q̸ = 0 AND u > z then
w ← u
Else
w ← z
EndIf
r ← w * 2 − w
Return r
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt false
referitoare la algoritmul book(n)?
A. Pentru apelul book(3063528) algorit-
mul returneaz˘a 3.
B. Pentru apelul book(24680) algorit-
mul returneaz˘a -1.
C. Pentru apelul book(5792041) algorit-
mul returneaz˘a 9.
D. Algoritmul book(n) returneaz˘a -1
dac˘a num˘arul n cont, ine doar cifre din
mult, imea {3, 4, 5, 6, 7, 8}.
89. ✓ ?Se consider˘a algoritmii switch(a, b) s, i case(a, b), unde a s, i b sunt numere natu-
rale (1 ≤ a, b ≤ 106).
Algorithm switch(a, b)
If a = b then
Return a
EndIf
If a < b then
Return switch(a, b - a)
EndIf
Return switch(a - b, b)
EndAlgorithm
Algorithm case(a, b)
Return a * b DIV switch(a, b)
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Dac˘a a = 2024 s, i b = 32, atunci apelul switch(a, b) returneaz˘a 8.
B. Dac˘a a = 48 s, i b = 22, atunci apelul case(a, b) returneaz˘a 528.
C. Algoritmul switch(a, b) returneaz˘a cel mai mic multiplu comun al lui a s, i b.
D. Algoritmul case(a, b) returneaz˘a produsul celor dou˘a numere, dac˘a acestea
sunt prime ˆıntre ele.
90. ✓ ?Se consider˘a algoritmul red(arr, n), unde n este un num˘ar natural nenul (1 ≤ n ≤
104) s, i arr este un s, ir de numere ˆıntregi cu n elemente (0 ≤ arr[1], arr[2], . . . , arr[n] ≤
106).
61

Subiect · pagina 67

Algoritmi elementari Probleme
Algorithm red(arr, n)
For i ← n − 1, 1, −1 execute
If arr[i] < arr[i + 1] then
arr[i] ← arr[i] − arr[i + 1]
arr[i + 1] ← arr[i + 1] + arr[i]
arr[i] ← arr[i + 1] − arr[i]
EndIf
EndFor
Return arr[1]
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Pentru apelul red([15, 23, 7, 12,
81, 49, 35, 31], 8) algoritmul re-
turneaz˘a 7.
B. Pentru apelul red([23, 10, 44,
52, 19, 81, 3, 72, 22], 9) algo-
ritmul returneaz˘a 81.
C. Algoritmul red(arr, n) sorteaz˘a des-
cresc˘ator vectorul arr.
D. Algoritmul red(arr, n) determin˘a
elementul minim din vectorul arr.
91. ✓ ?Se consider˘a algoritmul great(arr, n, i), unde n s, i i sunt numere naturale ne-
nule (1 ≤ n, i ≤ 104), iar arr este un s, ir de numere naturale cu n elemente (1 ≤
arr[1], arr[2], . . . , arr[n] ≤ 106).
Algorithm great(arr, n, i)
If i = n then
Return arr[i]
EndIf
g ← great(arr, n, i + 1)
While g̸ = 0 execute
If arr[i] > g then
arr[i] ← arr[i] MOD g
Else
temp ← arr[i]
arr[i] ← g
g ← temp MOD g
EndIf
EndWhile
Return arr[i]
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii
sunt adev˘arate referitoare la algoritmul
great(arr, n, i).
A. Pentru apelul great([30, 60,
12, 48, 72], 5, 1) algoritmul
returneaz˘a 3.
B. Pentru apelul great([21, 14, 42],
3, 2) algoritmul returneaz˘a 7.
C. Pentru apelul great([45, 35,
20, 80, 50], 5, 3) algoritmul
returneaz˘a 10.
D. Algoritmul are complexitate liniar˘a
O(n).
92. ✓ ?Se consider˘a algoritmul Algo(v, n), unde v este un vector cu n numere naturale
(v[1], v[2], . . . , v[n]) (1 ≤ n ≤ 105):
Algorithm Algo(v, n)
s ← 0
For i ← 1, n execute
v[i] ← n + 1 − i
EndFor
For i ← 1, n execute
If i MOD 2̸ = 0 then
s ← s + v[i]
EndIf
EndFor
Write s
EndAlgorithm
Ce valoare afis, eaz˘a algoritmul ˆın urma ape-
lului Algo(v, 10)?
A. 25
B. 35
C. 50
D. 30
62

Subiect · pagina 68

Algoritmi elementari Probleme
93. ✓ ?Se consider˘a algoritmii ceFace1(v, n) s, i ceFace2(v, n, i, fl, sl), unde n s, i i
sunt numere naturale (1 ≤ n ≤ 104, 0 ≤ i ≤ n), iar v este un s, ir de numere ˆıntregi
cu n + 1 elemente (0 ≤ v[0], v[1], v[2], . . . , v[n] ≤ 106). f l si sl sunt 2 numere naturale
(0 ≤ f l, sl ≤ 106).
Algorithm ceFace2(v, n, i, fl, sl)
If i ≤ n then
If v[i] > f l then
ceFace2(v, n, i + 1, v[i], fl)
Else
If v[i] > sl AND v[i]̸ = f l then
ceFace2(v, n, i + 1, fl, v[i])
Else
ceFace2(v, n, i + 1, fl, sl)
EndIf
EndIf
Else
Write ‘(‘, fl, ‘,‘, sl, ‘)‘, ‘ ’
EndIf
EndAlgorithm
Algorithm ceFace1(v, n)
For k ← 0, n execute
ceFace2(v, n, k, 0, 0)
EndFor
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate referitoare la algoritmii ceFace1(v,
n) s, i ceFace2(v, n, i, fl, sl)?
A. Pentru apelul ceFace2([9, 8, 6, 3, 7, 2, 4], 6, 1, 0, 0), algoritmul afis, eaz˘a
(8, 7).
B. Pentru apelul ceFace1([7, 9, 1, 4, 5, 3], 5), algoritmul afis, eaz˘a (9, 7) (9, 5)
(5, 4) (5, 4) (5, 3).
C. Algoritmul ceFace1(v, n) afis, eaz˘a n + 1 perechi de numere din vectorul v, de
forma (a, b), unde a > b s, i a este cel mai mare element din vectorul v.
D. Pentru apelul ceFace2([5, 5, 4, 2, 1, 3, 1], 6, 3, 0, 0), algoritmul afis, eaz˘a
(3, 2).
94. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
109).
Algorithm ceFace(n)
While n̸ = 0 execute
If n MOD 4 > 1 then
Return False
EndIf
n ← n DIV 4
EndWhile
Return True
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
false?
A. Algoritmul returneaz˘a True dac˘a s, i
numai dac˘a n cont, ine doar cifrele 0
s, i 1 ˆın reprezentarea sa ˆın baza 4.
B. Algoritmul verific˘a dac˘a num˘arul n
poate fi scris ca suma de puteri dis-
tincte ale lui 4.
C. Pentru n = 806, algoritmul returneaz˘a
False.
D. Algoritmul returneaz˘a False pentru
orice num˘ar care nu este multiplu de
4.
63

Subiect · pagina 69

Algoritmi elementari Probleme
95. ✓ ?Se consider˘a algoritmul Algo(v), unde v este un vector cu n = 8 elemente (v[1], v[2], . . . , v[8]):
Algorithm Algo(v)
For i ← 8, 1, −1 execute
If i MOD 2̸ = 0 then
v[i] ← i + 1
Else
v[i] ← i − i/2
EndIf
EndFor
EndAlgorithm
Cum va ar˘ata vectorul v ˆın urma execut, iei
instruct, iunilor algoritmului Algo(v)?
A. 3 1 5 3 7 5 9 7
B. 2 1 4 3 6 5 8 7
C. 2 1 4 2 6 3 8 4
D. 3 1 5 3 5 7 7 9
96. ✓ ?Se consider˘a algoritmul Algo(v, n, e), unde v este un vector cu n elemente ˆıntregi
distincte (v[1], v[2], . . . , v[n]), 1 ≤ n ≤ 104 s, i v[i]̸ = v[j], pentru 1 ≤ i ≤ j ≤ n), iar e
este un num˘ar ˆıntreg. Algoritmul caut˘a elementul e ˆın vectorul v s, i, dac˘a ˆıl g˘ases, te,
mut˘a toate elementele de dup˘a elementul e la ˆınceputul vectorului s, i returneaz˘a True,
nemodificˆand ordinea celorlalte elemente. Dac˘a elementul e nu se g˘ases, te ˆın v, al-
goritmul returneaz˘a False s, i nu modific˘a nimic. De exemplu, pentru vectorul v cu
elementele [3, 5, 7, 9, 11] s, i e = 5, algoritmul va returna True s, i vectorul v va deveni
[7, 9, 11, 3, 5]. Care dintre urm˘atoarele implement˘ari de mai jos este o variant˘a corect˘a
pentru algoritmul descris?
A.
Algorithm algo(v, n, e)
i ← 0
While i < n execute
If v[i] = e then
Break
EndIf
i ← i + 1
EndWhile
If i = n then
Return False
EndIf
j ← i
While j < n execute
v[j − i] ← v[j]
j ← j + 1
EndWhile
k ← 0
While k < i execute
v[n − i + k] ← v[n − k − 1]
k ← k + 1
EndWhile
Return True
EndAlgorithm
B.
Algorithm algo(v, n, e)
i ← 0
f ound ← False
While i < n execute
If v[i] = e then
f ound ← True
Break
EndIf
i ← i + 1
EndWhile
If NOT f ound then
Return False
EndIf
j ← i
While j < n execute
v[j − i] ← v[j]
j ← j + 1
EndWhile
k ← 0
While k < i execute
v[k] ← v[n − i + k]
k ← k + 1
EndWhile
Return True
EndAlgorithm
64

Subiect · pagina 70

Algoritmi elementari Probleme
C.
Algorithm algo(v, n, e)
i ← 1
f ound ← False
While i ≤ n execute
If v[i] = e then
f ound ← True
Break
EndIf
i ← i + 1
EndWhile
If NOT f ound then
Return False
EndIf
elements ← n − i
temp ← [] ▷ vector vid
For j ← 1, elements execute
temp[j] ← v[i + j]
EndFor
For j ← i, 1, −1 execute
v[j + elements] ← v[j]
EndFor
For j ← 1, elements execute
v[j] ← temp[j]
EndFor
Return True
EndAlgorithm
D.
Algorithm algo(v, n, e)
i ← 0
f ound ← False
While i < n execute
If v[i] = e then
f ound ← True
Break
EndIf
i ← i + 1
EndWhile
If NOT f ound then
Return False
EndIf
temp ← [0] ∗ i
k ← 0
tempIndex ← 0
While k ≤ i execute
temp[tempIndex] ← v[k]
tempIndex ← tempIndex + 1
k ← k + 1
EndWhile
j ← i
While j < n execute
v[j − i] ← v[j]
j ← j + 1
EndWhile
k ← 0
While k < i execute
v[n − i + k] ← temp[k]
k ← k + 1
EndWhile
Return True
EndAlgorithm
97. ✓ ?Se consider˘a algoritmul algo(v, n, k), unde n este un num˘ar natural (1 ≤ n ≤ 104),
v este un vector cu n elemente numere ˆıntregi (v[1], v[2], . . . , v[n]), iar k este un num˘ar
natural:
Algorithm algo(v, n, k)
If n MOD k̸ = 0 then
Return False
EndIf
s ← n DIV k
For i ← 1, k execute
start ← (i − 1) ∗ s + 1
end ← i ∗ s
For j ← start, end − 1 execute
If v[j] ≥ v[j + 1] then
Return False
EndIf
EndFor
EndFor
65

Subiect · pagina 71

Algoritmi elementari Probleme
Return True
EndAlgorithm
Precizat, i care dintre afirmat, iile de mai jos sunt adev˘arate:
A. Algoritmul verific˘a dac˘a un vector poate fi ˆımp˘art, it ˆın k subsecvent, e egale, fiecare
fiind strict cresc˘ator.
B. Algoritmul verific˘a dac˘a un vector poate fi ˆımp˘art, it ˆın k subsecvent, e, fiecare fiind
ordonat cresc˘ator.
C. Apelul algo([1, 2, 1, 2, 1, 2, 1, 2], 8, 4) returneaz˘a valoarea True.
D. Apelul algo([1, 2, 3, 4, 3, 4], 6, 2) returneaz˘a valoarea True.
98. ✓ ?Se consider˘a algoritmul algo(n, k), unde n s, i k sunt numere naturale (1 ≤ n, k ≤
106):
Algorithm algo(n, k)
nr ← 0
p ← 1
While (n̸ = 0)
AND (k̸ = 0) execute
a ← n MOD 10
b ← (n DIV 10) MOD 10
If (a + b) MOD 3 = 0 then
nr ← nr + (a ∗ b) ∗ p
p ← p ∗ 10
Else
k ← k − 1
EndIf
n ← n DIV 10
EndWhile
Return nr
EndAlgorithm
Care dintre urm˘atoarele perechi de apeluri
returneaz˘a valori identice?
A. algo(676458, 3) s, i algo(655413,
3)
B. ceFace(2314587, 4) s, i
ceFace(1314579, 5)
C. algo(321458, 7) s, i algo(120459,
6)
D. ceFace(227459, 6) s, i algo(227454,
4)
99. ✓ ?Se consider˘a algoritmul transform(secv, n, m), unde n este un num˘ar natural
(1 ≤ n ≤ 104), secv este un vector cu n elemente numere naturale (secv[1], secv[2], . . . ,
secv[n]), iar m este un num˘ar ˆıntreg. Se consider˘a |m| ca fiind valoarea absolut˘a a
num˘arului.
Algorithm transform(secv, n, m)
For i ← 1, n execute
rez[i] ← 1
EndFor
For i ← 1, n execute
If m = 0 then
rez[i] ← 1
Else If m > 0 then
prod ← 1
For j ← 1, m execute
prod ← prod ∗ secv[(i + j − 1) MOD n + 1]
EndFor
rez[i] ← prod
Else
prod ← 1
66

Subiect · pagina 72

Algoritmi elementari Probleme
For j ← 1, |m| execute
prod ← prod ∗ secv[(i − j + n − 1) MOD n + 1]
EndFor
rez[i] ← prod
EndIf
EndFor
Return rez
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii sunt adev˘arate:
A. Pentru apelul transform([1, 3, 8, 5, 9], 5, 2) algoritmul va returna
[25, 40, 45, 30, 9].
B. Pentru apelul transform([1, 3, 2, 7], 4, -3) algoritmul va returna
[42, 14, 21, 6].
C. Pentru apelul transform([2, 3, 4, 5, 6], 5, 3) algoritmul va returna
[60, 120, 60, 36, 24].
D. Pentru apelul transform([1, 3, 7, 5, 9], 5, -2) algoritmul va returna
[45, 9, 3, 21, 35].
100. ✓ ?Se consider˘a algoritmii g(v, n), s, i f(v, n, t),unde n este un num˘ar natural (1 ≤
n ≤ 104), v este un vector cu n elemente numere naturale (v[1], v[2], . . . , v[n]), iar t
este un num˘ar natural (1 ≤ n ≤ 104). Valoarea IN F reprezint˘a valoarea cea mai mare
valoarea posibil˘a.
Algorithm f(v, n, t)
g(v, n)
c ← INF
aux ← [ ]
For i ← 1, 3 execute
aux[i] ← 0
EndFor
For i ← 1, n − 2 execute
l ← i + 1
r ← n − 1
While l < r execute
s ← v[i] + v[l] + v[r]
If |s − t| < |c − t| then
c ← s
aux ← [v[i], v[l], v[r]]
EndIf
If s < t then
l ← l + 1
Else If s > t then
r ← r − 1
Else
Return aux
EndIf
EndWhile
EndFor
Return aux
EndAlgorithm
Algorithm g(v, n)
For i ← 1, n − 1 execute
For j ← 1, n − i execute
If v[j] > v[j + 1] then
temp ← v[j]
v[j] ← v[j + 1]
v[j + 1] ← temp
EndIf
EndFor
EndFor
EndAlgorithm
67

Subiect · pagina 73

Algoritmi elementari Probleme
Precizat, i care dintre afirmat, iile de mai jos sunt adev˘arate:
A. Algoritmul indic˘a tripletul de elemente din vector, a c˘arui sum˘a reprezint˘a cea
mai apropiat˘a valoare de o valoare dat˘a.
B. Algoritmul indic˘a tripletul de elemente din vector, a c˘arui sum˘a reprezint˘a ele-
mentul strict mai mic al unei valori date.
C. Pentru apelul f([-1, 2, 1, -3, 5, -4], 6, 1) algoritmul returneaz˘a [−3, −1, 5].
D. Pentru apelul f([-1, 7, 1, 5, -8], 5, 6) algoritmul returneaz˘a [−1, 1, 5].
101. ✓ ?Se consider˘a algoritmul one(nr), unde nr este un num˘ar natural nenul (1 ≤ nr ≤
106) s, i algoritmul two(v, n), unde n este un num˘ar natural nenul (1 ≤ n ≤ 10000) s, i
v un vector cu n numere naturale pozitive (1 ≤ v[1], v[2], . . . , v[n] ≤ 106).
1: Algorithm two(v, n)
2: cnt ← 0
3: p ← 1
4: For i ← 1, n − 1 execute
5: For j ← n, i + 1, −1 execute
6: p ← p + 1
7: If (one(v[i]) MOD 2 = one(v[j]) MOD 2) AND (one(v[i]) MOD 2) then
8: cnt ← cnt + 1
9: EndIf
10: EndFor
11: EndFor
12: Return p − cnt − 1
13: EndAlgorithm
Algorithm one(nr)
c ← 0
For d ← 1, d * d ≤ nr execute
If nr MOD d = 0 then
c ← c + 1
If d * d < nr then
c ← c + 1
EndIf
EndIf
EndFor
Return c
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
false?
A. Pentru apelul one(2027), se retur-
neaz˘a 2.
B. Pentru apelul two([144, 12, 24,
1024, 4, 36], 6), se returneaz˘a 6.
C. Algoritmul two(v, n) returneaz˘a
num˘arul de perechi (a, b) de elemente
din vector, cu num˘ar par de divizori.
D. Dac˘a linia 12 ar fi schimbat˘a cu
“Return cnt”, algoritmul two(v,
n) ar returna num˘arul de perechi de
elemente din vector, cu proprietatea
c˘a cele 2 numere sunt p˘atrate per-
fecte.
102. ✓ ?Se consider˘a algoritmul poate(n, b), unde n s, i b sunt numere naturale nenule
(1 ≤ n ≤ 109, 2 ≤ b ≤ 10).
Algorithm poate(n, b)
If n = 0 then
Return 1
EndIf
68

Subiect · pagina 74

Algoritmi elementari Probleme
Return n MOD b MOD 2 * poate(n DIV b, b)
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru n = 42 s, i b = 4, algoritmul returneaz˘a 1.
B. Pentru n = 502 s, i b = 7, algoritmul returneaz˘a 1.
C. Algoritmul poate(n, b) returneaz˘a produsul cifrelor pare ale lui n din reprezen-
tarea ˆın baza b.
D. Algoritmul poate(n, b) returneaz˘a 1 dac˘a s, i numai dac˘a toate cifrele lui n din
reprezentarea ˆın baza b sunt impare.
103. ✓ ?Fie nr un num˘ar ˆıntreg (0 < nr ≤ 109) s, i b o baz˘a ˆıntreag˘a (1 < b < 11). Precizat, i
care dintre urm˘atorii algoritmi transform˘a corect num˘arul nr din baza b ˆın baza 10 s, i
returneaz˘a acest num˘ar.
A.
Algorithm alg1(nr, b)
rez ← 0
k ← 1
ax ← 1
While nr > 0 execute
ax ← (nr MOD 10) ∗ k
rez ← rez + ax
nr ← nr DIV 10
k ← k ∗ b
EndWhile
Return rez
EndAlgorithm
B.
Algorithm alg2(nr, b)
rez ← 0
k ← 1
While nr > 0 execute
k ← k ∗ b
rez ← rez + (nr MOD 10) ∗ k
nr ← nr DIV 10
EndWhile
Return rez
EndAlgorithm
C.
Algorithm alg3(nr, b)
If nr = 0 then
Return 0
EndIf
Return nr MOD 10+alg3(nr DIV 10, b∗
b)
EndAlgorithm
D.
Algorithm alg4(nr, b)
If nr = 0 then
Return 0
EndIf
ax ← nr
ax ← ax MOD 10
nr1 ← nr DIV 10
Return ax + alg4(nr1, b) ∗ b
EndAlgorithm
104. ✓ ?Se consider˘a algoritmul clock(n), unde n este un num˘ar natural (1 ≤ n ≤ 104).
Algorithm clock(n)
nd ← 0
For i ← 1, n execute
If n MOD i = 0 then
If i MOD 2 = 0 then
nd ← nd + 1
Else
nd ← nd − 1
EndIf
69

Subiect · pagina 75

Algoritmi elementari Probleme
EndIf
EndFor
Return nd
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Dac˘a n = 12, algoritmul returneaz˘a 2.
B. Algoritmul calculeaz˘a s, i returneaz˘a diferent, a dintre num˘arul de divizori pari s, i
num˘arul de divizori impari ai lui n.
C. Dac˘a n este un num˘ar prim, algoritmul clock(n) returneaz˘a ˆıntotdeauna -2.
D. Algoritmul clock(n) returneaz˘a 0 pentru toate numerele din mult, imea
{2, 6, 18, 30, 72}.
105. ✓ ?Se consider˘a algoritmul algo(n, x, p), unde n este un num˘ar natural (1 ≤ n ≤
105), x este un vector cu n elemente numere ˆıntregi (x[1], x[2], . . . , x[n]), iar p este un
num˘ar natural:
Algorithm algo(n, x, p)
If n MOD p̸ = 0 then
Return False
EndIf
i ← 1
While i ≤ n − p execute
If x[i]̸ = x[i + p] then
Return False
EndIf
i ← i + 1
EndWhile
Return True
EndAlgorithm
Pentru care dintre urm˘atoarele condit, ii al-
goritmul returneaz˘a True?
A. Dac˘a vectorul x este periodic de peri-
oad˘a p, iar lungimea n este un multi-
plu al perioadei p.
B. Dac˘a ˆın vectorul x toate elementele au
aceeas, i valoare, indiferent de valoarea
lui p.
C. Dac˘a x[i] este egal cu x[i+p] pen-
tru i = 1, n, iar lungimea n nu este
multiplu al lui p.
D. Dac˘a vectorul x este periodic cu peri-
oada p, iar n mod p = 0.
106. ✓ ?Se consider˘a algoritmul algo(n, d), unde n este un num˘ar natural pozitiv (1 ≤
n ≤ 104), iar d este o cifr˘a (0 ≤ d ≤ 9).
Algorithm algo(n, d)
count ← 0
total ← 0
While n > 0 execute
r ← n MOD 10
If r = d then
count ← count + 1
EndIf
total ← total + 1
n ← n DIV 10
EndWhile
Return count > total DIV 2
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii
sunt adev˘arate:
A. Pentru n = 1223333 s, i d = 3, algorit-
mul returneaz˘a True.
B. Pentru n = 444555 s, i d = 4, algorit-
mul returneaz˘a True.
C. Algoritmul verific˘a dac˘a cifra d apare
de mai multe ori decˆat jum˘atate din
num˘arul total de cifre ale lui n.
D. Pentru n = 77431 s, i d = 7, algoritmul
returneaz˘a True.
70

Subiect · pagina 76

Algoritmi elementari Probleme
107. ✓ ?Se consider˘a algoritmul algo(n, b), unde n este un num˘ar natural pozitiv (1 ≤
n ≤ 106) s, i b este un num˘ar natural.
Algorithm algo(n, b)
count ← 0
While n > 0 execute
r ← n MOD b
If r MOD (b − 1) = 0 then
count ← count + 1
EndIf
n ← n DIV b
EndWhile
Return count
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii
sunt adev˘arate:
A. Pentru n = 31 s, i b = 4, algoritmul
returneaz˘a 2.
B. Pentru n = 255 s, i b = 16, algoritmul
returneaz˘a 2.
C. Algoritmul determin˘a cˆate cifre din
reprezentarea num˘arului n ˆın baza b
sunt divizibile cu b − 1.
D. Algoritmul determin˘a suma cifrelor
din reprezentarea num˘arului n ˆın baza
b care sunt divizibile cu b − 1.
108. ✓ ?Se consider˘a algoritmul algo(n, x), unde n este un num˘ar natural (1 ≤ n ≤ 104),
iar x este un vector cu n elemente numere ˆıntregi (x[1], x[2], . . . , x[n]).
Algorithm algo(n, x)
For i ← 1, n − 1 execute
nr ← 0
a ← x[i]
b ← x[i + 1]
While a > 0 OR b > 0 execute
If a > 0 then
cif a ← a MOD 10
Else
cif a ← 0
EndIf
If b > 0 then
cif b ← b MOD 10
Else
cif b ← 0
EndIf
If cif a > cif b then
nr ← nr + (cif a − cif b)
Else If cif a < cif b then
nr ← nr − (cif b − cif a)
Else
nr ← nr + 1
EndIf
a ← a DIV 10
b ← b DIV 10
EndWhile
x[i] ← (x[i] + nr) MOD (i + 1)
EndFor
s ← 0
For i ← 1, n execute
s ← s + x[i]
EndFor
71

Subiect · pagina 77

Algoritmi elementari Probleme
x[n] ← s MOD 10
Return x
EndAlgorithm
Care va fi noul cont, inut al vectorului x dup˘a executarea algoritmului dat dac˘a n = 6
s, i x = [134, 214, 789, 578, 636, 543]?
A. [0, 2, 1, 2, 3, 2]
B. [0, 2, 1, 3, 3, 3]
C. [0, 2, 1, 3, 3, 2]
D. [1, 2, 1, 3, 3, 2]
109. ✓ ?Se consider˘a algoritmul algo(n), unde n este un num˘ar natural (1 ≤ n ≤ 105).
Algorithm algo(n)
a ← 0
b ← False
While n > 0 execute
c ← n MOD 10
If c MOD 2 = 0 then
a ← a + c
b ← True
EndIf
n ← n DIV 10
EndWhile
If NOT b then
Return −1
Else
Return a
EndIf
EndAlgorithm
Ce va returna apelul algo(6356)?
A. 13 B. 50 C. 0 D. 12
110. ✓ ?Se consider˘a algoritmul algo(a, b), unde a s, i b sunt numere naturale (1 ≤ a, b ≤
105).
Algorithm algo(a, b)
c ← 0
d ← 1
p ← 1
While a + b > 0 execute
If (a MOD 10 + b MOD 10) MOD 2 = 0 then
c ← (a MOD 10 + b MOD 10) ∗ p
Else
If a MOD 10 > b MOD 10 then
c ← (a MOD 10 − b MOD 10) ∗ p
Else
c ← (b MOD 10 − a MOD 10) ∗ p
EndIf
EndIf
If c < 0 then
c ← c ∗ (−1)
EndIf
d ← d + c
p ← p + 2
a ← a DIV 10
b ← b DIV 10
72

Subiect · pagina 78

Algoritmi elementari Probleme
EndWhile
Return d
EndAlgorithm
Care va fi rezultatul apelului algo(387, 2349)?
A. 23 B. 145 C. 97 D. 278
111. ✓ ?Se consider˘a algoritmul f(v, n), unde n este un num˘ar natural (1 ≤ n ≤ 104), iar
v este un vector cu n elemente numere naturale (v[1], v[2], . . . , v[n]).
Algorithm f(v, n)
If n = 0 then
Return 0
EndIf
If n = 1 then
Return v[1]
EndIf
p2 ← 0
p1 ← v[1]
For i ← 2, n execute
If p1 > p2 + v[i] then
c ← p1
Else
c ← p2 + v[i]
EndIf
p2 ← p1
p1 ← c
EndFor
Return p1
EndAlgorithm
A. Apelul f([2, 7, 9, 3, 1], 5) va
returna valoarea 12.
B. Apelul f([2, 1, 1, 2], 4) va re-
turna valoarea 3.
C. Apelul f([9, 7, 8, 4, 1, 9], 6)
va returna valoarea 26.
D. Apelul f([9, 7, 8, 4, 1, 6, 9,
2], 8) va returna valoarea 32.
112. ✓ ?Se consider˘a algoritmul ceFace(n, arr), unde n este un num˘ar natural nenul (1 ≤
n ≤ 104) s, i arr este un vector de n numere ˆıntregi (−100 ≤ arr[1], arr[2], . . . , arr[n] ≤
100).
Algorithm ceFace(n, arr)
b ← True
i ← 1
While i ≤ n and b execute
b ← arr[i] mod 2 = 0
i ← i + 1
EndWhile
Return b
EndAlgorithm
Pentru care din urm˘atoarele situat, ii algorit-
mul returneaz˘a True?
A. Dac˘a vectorul arr este format din va-
lorile 2, 0, 4, −2, 8, −6.
B. Dac˘a vectorul arr este format din va-
lorile 4, 10, −1, 8, 6, 2.
C. Dac˘a vectorul arr are doar elemente
impare.
D. Dac˘a vectorul arr are cel put, in un ele-
ment par.
113. ✓ ?Se consider˘a algoritmul X(arr, n, y), unde n s, i y sunt numere naturale (4 ≤
n ≤ 104, 1 ≤ y ≤ 104) s, i arr este un vector de n numere naturale nenule (1 ≤
arr[1], arr[2], . . . , arr[n] ≤ 104).
73

Subiect · pagina 79

Algoritmi elementari Probleme
Algorithm X(arr, n, y)
If y > n then
Return 0
EndIf
For i ← 1, n − 2 execute
arr[i+1] ← arr[i]+2 * arr[i+2]−arr[i+1]
EndFor
Return arr[y]
EndAlgorithm
Pentru care din urm˘atoarele ape-
luri returneaz˘a valoarea 16?
A. X([7, 4, 3, 5, 12], 5,
3)
B. X([2, 5, 7, 9, 4], 5,
4)
C. X([1, 4, 7, 8, 10, 16],
6, 6)
D. X([7, 5, 2, 3, 4, 9,
2], 7, 5)
Problemele 114., 115. se refer˘a la urm˘atorul algoritm ceFace(n, k, r), unde n, k,
s, i r sunt numere naturale nenule (1 ≤ n, k, r ≤ 103).
Algorithm ceFace(n, k, r)
If k * k > n then
If n > 1 then
r ← r * (n + 1)
EndIf
Return r
EndIf
p ← 0
sF ← 1
While n MOD k = 0 execute
p ← p + 1
n ← n DIV k
sF ← sF * k
EndWhile
If p > 0 then
r ← r * (sF * k − 1) DIV (k − 1)
EndIf
Return ceFace(n, k + 1, r)
EndAlgorithm
114. ✓ ?Pentru care din urm˘atoarele
afirmat, ii sunt adev˘arate referitoare
la apelul ceFace(n, 2, 1)?
A. Algoritmul returneaz˘a
num˘arul de divizori impari ai
num˘arului n.
B. Algoritmul returneaz˘a
num˘arul de divizori ai
num˘arului n.
C. Algoritmul returneaz˘a suma
divizorilor num˘arului n.
D. Algoritmul are complexitatea
de timp O(log n).
115. ✓ ?Care dintre urm˘atoarele afirmat, ii sunt false referitoare la algoritmul ceFace(n, k,
r)?
A. Pentru apelul ceFace(12, 2, 1) algoritmul returneaz˘a 28.
B. Pentru apelurile ceFace(16, 2, 1) s, i ceFace(30, 2, 2) algoritmul returneaz˘a
31.
C. Pentru apelul ceFace(360, 2, 1) algoritmul returneaz˘a 1160.
D. Pentru apelurile ceFace(100, 2, 1) s, i ceFace(100, 2, 2) algoritmul retur-
neaz˘a aceeas, i valoare.
116. ✓ ?Se consider˘a algoritmul ceFacea(n, l, h), unde n, l s, i h sunt numere naturale
nenule (1 ≤ n, l, h ≤ 109).
74

Subiect · pagina 80

Algoritmi elementari Probleme
Algorithm ceFacea(n, l, h)
If l > h then
Return False
EndIf
m ← l + (h − l) DIV 2
If m * m * m = n then
Return True
Else
If m * m * m < n then
Return ceFacea(n, m + 1, h)
Else
Return ceFacea(n, l, m - 1)
EndIf
EndIf
EndAlgorithm
Precizat, i care afirmat, ii de mai jos
sunt adev˘arate referitor la algorit-
mul ceFacea(n, 1, n).
A. Algoritmul returneaz˘a False
pentru n = 8.
B. Algoritmul returneaz˘a True
pentru n = 5832.
C. Exist˘a cel put, in 27 valori ˆın
intervalul (1, 30] pentru care
algoritmul returneaz˘a False.
D. Algoritmul returneaz˘a True
pentru exact 6 valori din in-
tervalul [9, 513).
117. ✓ ?Se consider˘a algoritmul Magic(n), unde n este un num˘ar natural (1 ≤ n ≤ 105)
Algorithm Magic(n)
s ← 0
p ← 1
While n > 0 execute
c ← n MOD 10
If c MOD 2 = 0 then
s ← s + c ∗ p
p ← p ∗ 10
Else
s ← c + s ∗ 10
EndIf
n ← n DIV 10
EndWhile
Return s
EndAlgorithm
Precizat, i care dintre afirmat, iile urm˘atoare
sunt adev˘arate:
A. Pentru apelul Magic(23456) valoarea
returnat˘a de algoritm este 1255
B. Pentru apelul Magic(987654) valoa-
rea returnat˘a de algoritm este 18579
C. Algoritmul Magic(n) returneaz˘a un
num˘ar construit prin rearanjarea ci-
frelor lui n, astfel ˆıncˆat cifrele impare
sunt p˘astrate ˆın ordine direct˘a, iar ci-
frele pare ˆın ordine invers˘a, ment, inˆand
pozit, iile relative ale acestora.
D. Algoritmul Magic(n) inverseaz˘a ordi-
nea tuturor cifrelor lui n.
118. ✓ ?Se consider˘a algoritmul Algo(x, y), unde x s, i y sunt numere naturale:
Algorithm Algo(x, y)
a ← x
b ← y
If a = 0 OR b = 0 then
a ← a ∗ b
Else
While a̸ = b execute
If a < b then
a ← a + x
Else
b ← b + y
EndIf
EndWhile
EndIf
75

Subiect · pagina 81

Algoritmi elementari Probleme
Write a
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii sunt corecte:
A. Algoritmul determin˘a cel mai mare divizor comun al numerelor x s, i y.
B. Algoritmul calculeaz˘a cel mai mare multiplu al numerelor x sau y.
C. Algoritmul calculeaz˘a cel mai mic multiplu comun a numerelor x s, i y.
D. Algoritmul determin˘a cel mai mic num˘ar divizibil fie cu x, fie cu y.
119. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural (1 ≤ n ≤ 106).
Algorithm ceFace(n)
s ← 0
p ← 1
While n > 0 execute
c ← n MOD 10
p ← 1
x ← c
ok ← True
For i ← 1, c − 1 execute
x ← x ∗ 10 + c
p ← p ∗ 10
EndFor
t ← x
inv ← 0
While t > 0 execute
inv ← inv ∗ 10 + t MOD 10
t ← t DIV 10
EndWhile
If x = inv AND x > 0 then
s ← s + x
p ← p ∗ c
EndIf
n ← n DIV 10
EndWhile
Return s MOD p
EndAlgorithm
Precizat, i care dintre afirmat, iile urm˘atoare
sunt adev˘arate:
A. Algoritmul ceFace(n) calculeaz˘a
suma numerelor formate din cifrele
lui n, repetate s, i verificate dac˘a
sunt palindromuri, s, i returneaz˘a
restul ˆımp˘art, irii la produsul cifrelor
speciale.
B. Pentru apelul ceFace(789), valoarea
returnat˘a de algoritm este 464.
C. Algoritmul returneaz˘a 0 dac˘a n
cont, ine cel put, in o cifr˘a 0
D. Pentru apelul ceFace(123), algorit-
mul returneaz˘a 3 deoarece doar cifrele
care genereaz˘a palindromuri de lun-
gime impar˘a contribuie la suma final˘a.
120. ✓ ?Se consider˘a algoritmul ceFace(n, p), unde n s, i p sunt numere naturale nenule
(2 ≤ n ≤ 20, 1 ≤ p ≤ n).
Algorithm ceFace(n, p)
nrF ← 0
pr ← p
While n ≥ pr execute
nrF ← nrF + n DIV pr
pr ← pr ∗ p
EndWhile
Return nrF
EndAlgorithm
Precizat, i care afirmat, ii de mai jos sunt adev˘arate:
A. Algoritmul are complexitatea O(log n).
76

Subiect · pagina 82

Algoritmi elementari Probleme
B. Algoritmul returneaz˘a suma numerelor mai mici ca n care sunt divizibile cu p.
C. Algoritmul returneaz˘a num˘arul de factori p din n!.
D. Algoritmul returneaz˘a num˘arul de numere divizibile cu p din intervalul [1, n].
121. ✓ ?Se consider˘a algoritmii Cifra(n) s, i Check(x), unde n s, i x sunt numere naturale
(1 ≤ n, x ≤ 106). f recv este un s, ir de 10 elemente, init, ializate cu 0.
Algorithm Cifra(n)
temp ← n
While temp > 0 execute
cif ra ← temp MOD 10
f recv[cif ra] ← f recv[cif ra] + 1
If f recv[cif ra] > 1 then
Return 0
EndIf
temp ← temp DIV 10
EndWhile
s ← Check(n)
If s = n then
Return 1
EndIf
While s > 9 execute
aux ← s
s ← 0
While aux > 0 execute
s ← s + aux MOD 10
aux ← aux DIV 10
EndWhile
EndWhile
Return s
EndAlgorithm
Algorithm Check(x)
s ← 0
For d ← 1, √x execute
If x MOD d = 0 then
s ← s + d
If d ∗ d̸ = x then
s ← s + x DIV d
EndIf
EndIf
EndFor
Return s
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Funct, ia Cifra(n) returneaz˘a 1 dac˘a n este un num˘ar perfect s, i toate cifrele sale
sunt distincte.
B. Pentru apelul Cifra(7654), valoarea returnat˘a de algoritm este 9.
C. Funct, ia Cifra(n) returneaz˘a restul sumei divizorilor lui n redus la o singur˘a
cifr˘a, dac˘a toate cifrele lui n sunt distincte.
D. Pentru apelul Cifra(452), valoarea returnat˘a de algoritm este 6.
122. ✓ ?Se consider˘a algoritmii ceFace(n) s, i Algo(n), unde n este un num˘ar natural nenul
(1 ≤ n ≤ 106). Simbolul & reprezint˘a operat, ia de AND pe bit, i (1012&1102 = 1002).
77

Subiect · pagina 83

Algoritmi elementari Probleme
Algorithm Algo(n)
For i ← 1, n execute
v[i] ← i − 1
EndFor
For i ← n, 2 execute
j ← (i − 1) & ((i − 1) − 1)
aux ← v[i]
v[i] ← v[j + 1]
v[j + 1] ← aux
EndFor
Return v
EndAlgorithm
Algorithm ceFace(n)
p ← Algo(n)
suma ← 0
For i ← 1, n execute
If (p[i] & (i − 1)) = (i − 1) then
suma ← suma + 1
EndIf
EndFor
Return suma
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Pentru apelul ceFace(2345), valoarea returnat˘a de algoritm este 587.
B. Algoritmul determin˘a suma palindromurilor formate din fiecare cifr˘a repetat˘a
un num˘ar egal cu valoarea sa, modulat˘a de produsul cifrelor din num˘ar care
genereaz˘a palindromurilor valide.
C. Pentru apelul ceFace(7546), valoarea returnat˘a de algoritm este 1887.
D. Algoritmul calculeaz˘a r˘ad˘acina produsului dintre palindromurilor formate din
fiecare cifr˘a repetat˘a de atˆatea ori cˆat reprezint˘a valoarea cifrei.
123. ✓ ?Se consider˘a algoritmul S(n, s, d), unde n, s s, i d sunt numere naturale nenule
(1 ≤ n, s, d ≤ 104).
Algorithm S(n, s, d)
If s > n then
Return False
EndIf
If s = n then
Return True
EndIf
Return S(n, s + d, d + 2)
EndAlgorithm
Precizat, i care afirmat, ii sunt adev˘arate referitor la apelul algoritmului S(n, 0, 1):
A. Algoritmul verific˘a dac˘a n este p˘atrat perfect.
B. Algoritmul verific˘a dac˘a n poate fi scris ca sum˘a de numere naturale consecutive
impare ˆıncepˆand de la 1.
C. Exist˘a exact 19 valori ˆın intervalul [71, 734] pentru care algoritmul returneaz˘a
True.
D. Algoritmul returneaz˘a False pentru exact 2 numere din mult, imea {73, 9, 442, 841,
576, 962}.
124. ✓ ?Se consider˘a algoritmul ceFace(n, k), unde n s, i k reprezint˘a numere naturale:
78

Subiect · pagina 84

Algoritmi elementari Probleme
Algorithm ceFace(n, k)
c ← 0
While n > 0 execute
x ← n
y ← 0
len ← 0
For i ← 1, k execute
If x = 0 then
Return c
EndIf
y ← y ∗ 10 + (x MOD 10)
x ← x DIV 10
len ← len + 1
EndFor
If len < k then
Return c
EndIf
unique ← True
temp ← y
While temp > 0 execute
d ← (temp MOD 10)
f recv[d] ← f recv[d] + 1
If f recv[d] > 1 then
unique ← False
Break
EndIf
temp ← temp DIV 10
EndWhile
If unique then
c ← c + 1
EndIf
n ← n DIV 10
EndWhile
Return c
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii
sunt adev˘arate:
A. Secvent, ele verificate sunt reordonate
s, i comparate ˆın ordine descresc˘atoare
pentru a determina unicitatea cifrelor.
B. Algoritmul determin˘a num˘arul de
subsecvent, e de k cifre consecutive ˆın
n, unde toate cifrele din subsecvent, ˘a
sunt distincte
C. Dac˘a lungimea r˘amas˘a a num˘arului
n este mai mic˘a decˆat k, algoritmul
returneaz˘a 0 f˘ar˘a a mai verifica alte
secvent, e.
D. Algoritmul calculeaz˘a suma cifrelor
distincte din secvent, ele de lungime k
ˆın loc s˘a returneze num˘arul lor.
125. ✓ ?Se consider˘a algoritmul SpecialBits(n), unde n reprezint˘a un num˘ar natural (1 ≤
n ≤ 105). Operat, ia SHL (Shift Left) este definit˘a ca o operat, ie de deplasare pe bit, i
(bitwise shift left), care deplaseaz˘a bit, ii unui num˘ar spre stˆanga cu un anumit num˘ar
de pozit, ii.
Algorithm SpecialBits(n)
If n = 0 then
Return 0
EndIf
count ← 0
mask ← 1
While mask ≤ n execute
temp ← n AND ((mask SHL 1) − 1)
next ← temp OR mask
If next ≤ n then
count ← count + 1
aux ← next
While aux > 0 execute
79

Subiect · pagina 85

Algoritmi elementari Probleme
If (aux AND mask)̸ = 0 then
test ← aux AND (aux −1)
If test ≤ n then
count ← count + 1
aux ← test
Else
aux ← aux AND (aux − 1)
EndIf
Else
aux ← aux AND (aux − 1)
EndIf
EndWhile
EndIf
mask ← mask SHL 1
EndWhile
Return count
EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii sunt adev˘arate:
A. Algoritmul returneaz˘a num˘arul de operat, ii posibile asupra n, care respect˘a con-
strˆangerile impuse de mask s, i bit-shifting.
B. Dac˘a n este o putere a lui 2, algoritmul va returna ˆıntotdeauna n − 1.
C. Algoritmul verific˘a toate submask-urile posibile ale lui n, indiferent de con-
strˆangeri.
D. Pentru apelul SpecialBits(12), algoritmul va returna valoarea 9.
126. ✓ ?Se consider˘a algoritmul ceFace(a, b), unde a s, i b sunt numere naturale (1 ≤ a, b ≤
104).
1: Algorithm ceFace(a, b)
2: x ← a
3: y ← b
4: While x̸ = y execute
5: If x < y then
6: x ← x + a
7: Else
8: y ← y + b
9: EndIf
10: EndWhile
11: Return x
12: EndAlgorithm
Precizat, i care dintre urm˘atoarele afirmat, ii
sunt adev˘arate:
A. Pentru apelul ceFace(24, 36), algo-
ritmul returneaz˘a 72.
B. Pentru apelul ceFace(52, 14), algo-
ritmul returneaz˘a 728.
C. Algoritmul returneaz˘a cel mai mare
divizor comun al lui a s, i b.
D. Dac˘a Linia 11 ar fi schimbat˘a cu
Return a * b DIV y, algoritmul ar
returna cel mai mare divizor comun
al lui a s, i b.
80

Subiect · pagina 86

5
Complexitatea algoritmilor
Acest capitol acoper˘a
• De ce sunt importante complexit˘at, ile ˆın analiza algoritmilor;
• Cum se determin˘a complexitatea unui algoritm;
• Exemple de complexit˘at, i comune s, i implement˘arile lor;
• Diferent, a ˆıntre complexit˘at, i aditive s, i multiplicative.
5.1 Teorie
Complexit˘at, ile algoritmilor reprezint˘a un concept fundamental care se afl˘a la intersect, ia
dintre informatic˘a s, i matematic˘a. Acestea ne permit s˘a estim˘am num˘arul aproximativ
de pas, i necesari pentru ca un algoritm s˘a rezolve o problem˘a, constituind un instrument
esent, ial ˆın alegerea algoritmului optim ˆın funct, ie de cerint, ele de eficient, ˘a. Des, i comple-
xitatea poate fi analizat˘a atˆat din perspectiva temporal˘a, cˆat s, i spat, ial˘a, ˆın acest capitol
ne vom concentra pe analiza temporal˘a a algoritmilor.
5.1.1 Elementele Fundamentale ale Complexit˘at, ilor
• Complexitate constant˘a O(1):
– Timpul de execut, ie este independent de dimensiunea datelor de intrare
– Operat, iile elementare (atribuiri, operat, ii aritmetice simple, comparat, ii) au
complexitate constant˘a
• Complexitate liniar˘a O(n):
– Num˘arul de pas, i este direct proport, ional cu dimensiunea datelor de intrare
• Complexitate logaritmic˘a O(log n):
– Num˘arul de pas, i cres, te lent pe m˘asur˘a ce dimensiunea datelor de intrare devine
mai mare
• Complexitate radical O(√n):
– La fel ca ˆın cazul complexit˘at, ii logaritmice, num˘arul de pas, i cres, te lent pe
m˘asur˘a ce dimensiunea intr˘arii devine mai mare
• Complexitate p˘atratic˘a O(n2):
– Num˘arul de pas, i cres, te proport, ional cu p˘atratul dimensiunii datelor de intrare
ˆın cazul buclelor imbricate
• Complexitate exponent, ial˘a O(2n):

Subiect · pagina 87

Complexitatea algoritmilor Teorie
– Timpul de execut, ie cres, te rapid, fiind adesea ineficient pentru valori mari ale
intr˘arii
• Teorema Master (pentru algoritmi Divide and Conquer):
– Fie un algoritm recursiv de tipul Divide and Conquer. Complexitatea sa poate
fi scris˘a sub forma T (n) = a · T (n/b) + Θ(nk · logp(n)).
– Clasa de complexitate a algoritmului poate fi determinat˘a astfel:
∗ Cazul 1: Dac˘a a > bk ⇒ T (n) = Θ(nlogb(a))
∗ Cazul 2: Dac˘a a = bk:
· Pentru p > −1 ⇒ T (n) = Θ(nlogb(a) · logp+1(n))
· Pentru p = −1 ⇒ T (n) = Θ(nlogb(a) · log(log(n)))
· Pentru p < −1 ⇒ T (n) = Θ(nlogb(a))
∗ Cazul 3: Dac˘a a < bk:
· Pentru p ≥ 0 ⇒ T (n) = Θ(nk · logp(n))
· Pentru p < 0 ⇒ T (n) = O(nk)
5.1.2 Exemple de implementare
Exemplu de Complexitate Liniar˘a O(n)
1: For i ← 1, n execute
2: Write i
3: EndFor
Exemplu de Complexitate Logaritmic˘a O(log n)
1: i ← 1
2: While i ≤ n execute
3: Write i
4: i ← i × 2
5: EndWhile
Exemplu de Complexitate O(√n)
1: i ← 1
2: While i ∗ i ≤ n execute
3: Write i
4: i ← i + 1
5: EndWhile
Exemplu de Complexitate P˘atratic˘a O(n2)
1: For i ← 1, n execute
2: For j ← 1, n execute
3: Write i, j
4: EndFor
5: EndFor
82

Subiect · pagina 88

Complexitatea algoritmilor Probleme
Exemplu de Complexitate Exponent, ial˘a O(2n)
1: Algorithm Fibonacci(n)
2: If n ≤ 1 then
3: Return 1
4: Else
5: Return Fibonacci(n − 1) + Fibonacci(n − 2)
6: EndIf
7: EndAlgorithm
5.1.3 Analiza Complexit˘at, ii
• Complexitate temporal˘a: Analiza unui algoritm ˆın funct, ie de num˘arul de operat, ii
efectuate ˆın timpul execut, iei.
• Complexitate spat, ial˘a: Analiza resurselor de memorie utilizate de algoritm ˆın
timpul execut, iei.
Observat, ie important˘a: Constantele sunt ignorate ˆın analiza Big-O, deoarece nu
influent, eaz˘a cres, terea pe termen lung a complexit˘at, ii. De exemplu, un algoritm de com-
plexitate O(2n) este considerat echivalent cu unul de complexitate O(n).
5.2 Probleme
127. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
104).
Algorithm ceFace(n)
k ← 0
For i ← n, n DIV 3, −1 execute
For j ← 3, n, j ← j * 3 execute
k ← k + n DIV 3
EndFor
EndFor
Return k
EndAlgorithm
Care este complexitatea de timp a
algoritmului ceFace(n)?
A. O(n2)
B. O(n2 · log3(n))
C. O(n)
D. O(n · log3(n))
128. ✓ ?Se consider˘a algoritmul ceFace(n, v), unde v este un tablou unidimensional cu
cel mult 106 elemente (v[1], v[2], . . . , v[n]) s, i n reprezint˘a num˘arul elementelor din v.
Subalgoritmul A(n, v) produce o schimbare asupra tabloului v, sortˆand elementele
cresc˘ator folosind metoda Selection Sort.
Algorithm ceFace(n, v)
A(n, v)
For i ← 1, n − 2 execute
For j ← i + 1, n − 1 execute
st ← j + 1
dr ← n
k ← n
While st ≤ dr execute
k ← (st + dr)/2
If v[i] + v[j] > v[k] then
83

Subiect · pagina 89

Complexitatea algoritmilor Probleme
st ← k + 1
Else
dr ← k − 1
EndIf
EndWhile
cnt ← cnt + (dr − j)
EndFor
EndFor
Return cnt
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul ceFace are complexitatea O(n);
B. Algoritmul ceFace are complexitatea O(n2 log(n)) s, i calculeaz˘a num˘arul triple-
telor (i, j, k) din tabloul v cu proprietatea c˘a v[i] − v[j] + v[k] > 0.
C. Algoritmul ceFace are complexitatea O(n3) s, i calculeaz˘a num˘arul tripletelor
(i, j, k) din tabloul v cu proprietatea c˘a v[i] + v[j] > 0.
D. Algoritmul ceFace calculeaz˘a num˘arul triunghiurilor distincte care au lungimile
laturilor ˆın tabloul v.
129. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
104).
Algorithm ceFace(n)
k ← 0
m ← 1
While k ≤ n execute
ind ← 1
While ind ≤ m execute
Write j
ind ← ind + 1
EndWhile
k ← k + 1
m ← m * 3
EndWhile
EndAlgorithm
Care este complexitatea de timp a algorit-
mului ceFace(n)?
A. O(n · log3(n))
B. O(n2)
C. O(3n)
D. O(n · m)
130. ✓ ?Se consider˘a algoritmul Ack(n), unde n este un num˘ar natural nenul (1 ≤ n ≤ 104).
Algorithm Ack(n)
If n̸ = 1 then
Ack(n - 1)
Write n
Ack(n - 1)
Write n − 1
EndIf
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii referitoare la algo-
ritmul Ack(n) sunt false?
A. Complexitatea de timp a algoritmului Ack(n)
este O(n).
B. Complexitatea de timp a algoritmului Ack(n)
este O(2n).
C. Complexitatea de timp a algoritmului Ack(n)
este O(n2).
D. Niciuna dintre afirmat, iile de mai sus.
84

Subiect · pagina 90

Complexitatea algoritmilor Probleme
131. ✓ ?Se consider˘a algoritmul ceFace(n, i), unde n s, i i sunt numere naturale nenule
(1 ≤ n, i ≤ 104).
Algorithm ceFace(n, i)
If n = 1 then
Return 1
Else
m ← n DIV 2
If i MOD 2 = 0 then
Return ceFace(m, i)−i
Else
Return ceFace(m, i)+i
EndIf
EndIf
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii referitoare la
algoritmul ceFace(n, i) sunt adev˘arate?
A. Complexitatea de timp a algoritmului
ceFace(n, i) este O(log2(n)).
B. Complexitatea de timp a algoritmului
ceFace(n, i) este O(n).
C. Complexitatea de timp a algoritmului
ceFace(n, i) este O(n2).
D. Apelul ceFace(17, 5) returneaz˘a valoa-
rea 21.
132. ✓ ?Se consider˘a algoritmul X(n), unde n este un num˘ar natural nenul (1 ≤ n ≤ 104).
Algorithm X(n)
s ← 0
ind ← n
While ind > 0 execute
j ← 1
While j ≤ ind execute
s ← s + j + 5
j ← j * 5
ind ← ind DIV 5
EndWhile
EndWhile
Return s
EndAlgorithm
Care este complexitatea de timp a
algoritmului X(n)?
A. O(n2)
B. O(n · log5 n)
C. O(5n)
D. O(log5 n)
133. ✓ ?Care dintre urm˘atorii algoritmi sorteaz˘a ˆın cel mai eficient mod elementele unui
vector de n elemente cu valori din mult, imea {0, 1, 3, 5, 8, 9}?
A. QuickSort B. MergeSort C. CountSort D. BubbleSort
134. ✓ ?Se consider˘a vectorul ordonat cresc˘ator a cu n elemente numere naturale (1 ≤ n ≤
104) s, i un num˘ar natural q (1 ≤ n ≤ 109). Fie T interog˘ari de tipul: ”care este
num˘arul maxim de elemente din a ale c˘aror sum˘a nu dep˘as, es, te valoarea num˘arului
q?”. Care este complexitatea celui mai eficient subprogram care rezolv˘a o interogare?
(excluzˆand orice alte operat, ii ˆınaintea proces˘arii interog˘arilor)
A. O(log n); B. O(n log n); C. O(n); D. O(n2 log n).
85

Subiect · pagina 91

6
Subprograme
Acest capitol acoper˘a
• Ce sunt subprogramele s, i de ce sunt utile?
• Cum definim s, i folosim subprograme?
• Tipurile de subprograme: funct, ii s, i proceduri.
• Reutilizarea subprogramelor pentru organizarea codului.
6.1 Teorie
Introducere
ˆIn acest subcapitol discut˘am despre subprograme, un concept foarte important ˆın progra-
mare. Subprogramele reprezint˘a un mod de a ˆımp˘art, i un program mai mare ˆın sect, iuni
mai mici s, i reutilizabile, facilitˆand organizarea s, i gestionarea codului.
Elementele Fundamentale ale Subprogramelor
• Funct, ii:
– Subprograme care returneaz˘a o valoare.
• Proceduri:
– Subprograme care nu returneaz˘a o valoare.
Definirea Subprogramelor
Un subprogram este definit o singur˘a dat˘a, dar poate fi apelat de oricˆate ori este necesar
ˆın contextul unui program. Definirea unui subprogram implic˘a specificarea unui nume s, i
a unei liste de parametri. ˆIn cazul funct, iilor, este necesar˘a utilizarea s, i a unei instruct, iuni
return pentru a returna o valoare.
Funct, ia suma
1: Algorithm suma(a, b)
2: Return a + b
3: EndAlgorithm
Exemplul prezentat mai jos ilustreaz˘a o funct, ie simpl˘a care primes, te doi parametri, a s, i
b, s, i returneaz˘a suma acestora. Funct, ia poate fi apelat˘a de mai multe ori:
Apelarea funct, iei suma
1: result ← suma(3, 5)
2: Write result

Subiect · pagina 92

Subprograme Probleme
Parametrii Subprogramelor
Subprogramele pot include parametri, care reprezint˘a variabilele de intrare necesare pen-
tru a executa operat, iile definite. Aces, ti parametri pot fi de mai multe tipuri, iar atˆat
num˘arul, cˆat s, i tipul lor trebuie specificate la momentul apel˘arii subprogramului.
Funct, ia inmultire
1: Algorithm inmultire(a, b)
2: Return a ∗ b
3: EndAlgorithm
ˆIn cazul ˆın care un subprogram nu primes, te parametri, lista de parametri este omis˘a:
Funct, ia hello
1: Algorithm hello
2: Write ”Salutare viitor student UBB Info!”
3: EndAlgorithm
Reutilizarea Subprogramelor
Unul dintre cele mai mari avantaje ale subprogramelor este reutilizarea. Odat˘a definit,
un subprogram poate fi apelat de oricˆate ori este nevoie, ceea ce faciliteaz˘a modularitatea
s, i reduce totodat˘a redundant, a codului:
Apelarea funct, iei suma pentru reutilizare
1: result1 ← suma(10, 20)
2: result2 ← suma(15, 25)
Concluzie
Subprogramele sunt un instrument esent, ial pentru organizarea codului ˆın sect, iuni re-
utilizabile. Acestea simplific˘a dezvoltarea aplicat, iilor, reduc volumul de cod scris de
programatori s, i contribuie la cres, terea clarit˘at, ii s, i modularit˘at, ii codului.
6.2 Probleme
135. ✓ ?Se consider˘a algoritmul ceFace(arr, n, y), unde n s, i y sunt numere naturale
(1 ≤ n ≤ 104, 1 ≤ y ≤ 104) s, i arr este un vector de n numere naturale nenule
(1 ≤ arr[1], arr[2], . . . , arr[n] ≤ 104).
87

Subiect · pagina 93

Subprograme Probleme
Algorithm ceFace(arr, n, y)
rezultat ← 0
For i ← 1, n execute
If arr[i] > y then
rezultat ← rezultat + 1
EndIf
EndFor
Return rezultat
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii despre
funct, ie sunt adev˘arate?
A. Algoritmul are complexitate O(n);
B. Funct, ia returneaz˘a num˘arul elemente-
lor din arr care sunt mai mari decˆat
y;
C. Algoritmul returneaz˘a 0 dac˘a toate
elementele din arr sunt mai mici
decˆat y+1;
D. Algoritmul poate fi optimizat pentru
a reduce complexitatea la O(log n).
136. ✓ ?Se consider˘a algoritmul ceFace(v, n, k), unde n s, i k sunt numere naturale (1 ≤
n, k ≤ 106), iar v este un vector de n numere naturale nenule (1 ≤ v[1], v[2], . . . , v[n] ≤
109).
Algorithm ceFace(v, n, k)
k ← k MOD n
temp ← vector auxiliar de
dimensiune n
For i ← 1, n execute
temp[(i + k − 1) MOD n + 1] ← v[i]
EndFor
For i ← 1, n execute
v[i] ← temp[i]
EndFor
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii despre
funct, ie sunt adev˘arate?
A. Algoritmul are complexitate O(n);
B. Realizeaz˘a o rotat, ie a vectorului la
dreapta cu k pozit, ii;
C. Algoritmul face ca in vectorul temp
doar pozitiile pare sa fie ocupate;
D. Modific˘a vectorul original.
137. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde n este un num˘ar natural nenul (1 ≤
n ≤ 106), iar v este un vector de n numere ˆıntregi (−109 ≤ v[1], v[2], . . . , v[n] ≤ 109).
Algorithm ceFace(v, n)
count ← 0
For i ← 1, n − 1 execute
If v[i] > v[i + 1] then
temp ← v[i]
v[i] ← v[i + 1]
v[i + 1] ← temp
count ← count + 1
EndIf
EndFor
Return count
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii despre
funct, ie sunt adev˘arate?
A. Algoritmul implementeaz˘a o iterat, ie
din bubble sort;
B. Complexitatea este O(n);
C. Num˘arul returnat reprezint˘a cˆate in-
terschimb˘ari s-au f˘acut;
D. Vectorul va fi complet sortat dup˘a
execut, ie.
138. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde n este un num˘ar natural nenul (1 ≤
n ≤ 106), iar v este un vector de n numere ˆıntregi (−109 ≤ v[1], v[2], . . . , v[n] ≤ 109).
Algorithm ceFace(v, n)
Sum ← v[1]
88

Subiect · pagina 94

Subprograme Probleme
currentSum ← v[1]
For i ← 2, n execute
currentSum ← max(v[i], currentSum + v[i])
Sum ← max(Sum, currentSum)
EndFor
Return Sum
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul g˘ases, te suma maxim˘a a unei subsecvent, e continue;
B. Complexitatea este O(n);
C. Pentru un vector cu toate elementele negative, se va returna cel mai mare element;
D. Algoritmul modific˘a vectorul original.
139. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
109).
Algorithm ceFace(n)
count ← 0
For i ← 1, i · i ≤ n execute
If n mod i = 0 then
count ← count + 1
If i · i̸ = n then
count ← count + 1
EndIf
EndIf
EndFor
Return count
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt false?
A. Algoritmul num˘ar˘a divizorii proprii a lui n;
B. Complexitatea este O(√n);
C. Pentru n = 1, rezultatul este 0;
D. Pentru numere prime, rezultatul este ˆıntotdeauna 2.
140. ✓ ?Se consider˘a algoritmul ceFace(n, k), unde n s, i k sunt numere naturale nenule
(1 ≤ n, k ≤ 104).
Algorithm ceFace(n, k)
s ← 1
For i ← 1, n execute
If i mod k = 0 then
s ← s · i
EndIf
EndFor
Return s
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
89

Subiect · pagina 95

Subprograme Probleme
A. Subalgoritmul poate returna orice num˘ar din intervalul [0, 104];
B. Dac˘a ar lipsi linia cu if(i % k == 0), rezultatul funct, iei ar fi factorialul lui n;
C. Rezultatul funct, iei va fi un num˘ar divizibil cu k dac˘a s, i numai dac˘a n ≥ k;
D. Pentru cazul ˆın care n < k, subalgoritmul returneaz˘a mereu o cifr˘a.
141. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (2 ≤ n ≤
109).
Algorithm ceFace(n)
For i ← 2, n DIV 2 execute
If n mod i = 0 then
Return 0
EndIf
EndFor
Return 1
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul returneaz˘a cˆat, i divizori are num˘arul n;
B. Algoritmul verific˘a dac˘a num˘arul este prim, dar se poate face mai eficient;
C. Algoritmul are complexitatea O(√n);
D. Niciun r˘aspuns de mai sus.
142. ✓ ?Se consider˘a algoritmul ceFace(v, n, k), unde n s, i k sunt numere naturale (1 ≤
k < n ≤ 106), iar v este un vector de n numere ˆıntregi (−109 ≤ v[1], v[2], . . . , v[n] ≤
109).
Algorithm ceFace(v, n, k)
For i ← 2, n execute
v[i] ← v[i] + v[i − 1]
EndFor
Return v[n] − v[k]
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii despre funct, ie sunt adev˘arate?
A. Algoritmul poate returna s, i valori negative;
B. Algoritmul este p˘atratic;
C. Algoritmul calculeaz˘a suma subsecvent, ei dintre indicii [k + 1, n];
D. Dac˘a numerele din vector sunt pozitive s, i elementele ordonate cresc˘ator, rezulta-
tul este ˆıntotdeauna pozitiv s, i nenul.
143. ✓ ?Se consider˘a algoritmul ceFace(n) definit al˘aturat, unde n este un num˘ar natural,
n ≤ 1000 s, i a este un tablou unidimensional cu cel mult 105 elemente, init, ial toate
nule.
90

Subiect · pagina 96

Subprograme Probleme
Algorithm ceFace(n)
a[1] ← 1
cf ← 1
For i ← 1, n execute
cr ← 0
For j ← 1, cf execute
temp ← a[j] ∗ i + cr
a[j] ← temp MOD 10
cr ← temp DIV 10
EndFor
While cr̸ = 0 execute
cf ← cf + 1
a[cf ] ← cr MOD 10
cr ← cr DIV 10
EndWhile
EndFor
For i ← cf, 1, −1 execute
scrie a[i]
EndFor
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt
adev˘arate?
A. Algoritmul scrie pe ecran num˘arul de
cifre al tuturor valorilor x!, unde x ∈
[1, n];
B. Algoritmul scrie pe ecran valoarea lui
n!;
C. Pentru n = 10, programul afis, eaz˘a pe
ecran 3628800;
D. Pentru n = 5, programul afis, eaz˘a
11123.
144. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde v este un vector de n numere ˆıntregi
(−109 ≤ v[1], v[2], . . . , v[n] ≤ 109), iar n este un num˘ar natural nenul (1 ≤ n ≤ 106).
Algorithm ceFace(v, n)
result ← 0
i ← 1
While i ≤ n execute
While i < n and v[i] ≤ v[i + 1] execute
i ← i + 1
EndWhile
While i < n and v[i] ≥ v[i + 1] execute
i ← i + 1
EndWhile
result ← result + 1
i ← i + 1
EndWhile
Return result
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul num˘ar˘a vˆarfurile din vector (elemente precedate de o secvent, ˘a cresc˘atoare
s, i urmate de una descresc˘atoare);
B. Complexitatea este O(n);
C. Pentru un vector strict cresc˘ator returneaz˘a n/2;
D. Pentru un vector sortat cresc˘ator returneaz˘a 1.
145. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural nenul (1 ≤ n ≤
106).
91

Subiect · pagina 97

Subprograme Probleme
Algorithm ceFace(n)
sum ← 0
For i ← 1, n execute
If n mod i = 0 then
d ← i
While d > 0 execute
sum ← sum + (d mod 10)
d ← d DIV 10
EndWhile
EndIf
EndFor
Return sum
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt false?
A. Algoritmul calculeaz˘a suma cifrelor tuturor divizorilor lui n;
B. Complexitatea este O(n);
C. Pentru numere prime returneaz˘a 1 + suma cifrelor lui n;
D. Pentru n = 1 returneaz˘a 1.
146. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde v este un vector de n numere ˆıntregi
(−109 ≤ v[1], v[2], . . . , v[n] ≤ 109), iar n este un num˘ar natural nenul (1 ≤ n ≤ 106).
Algorithm ceFace(v, n)
maxLen ← 2
len ← 2
dif f ← v[2] − v[1]
For i ← 2, n − 1 execute
If v[i + 1] − v[i] = dif f then
len ← len + 1
Else
maxLen ← max(maxLen, len)
len ← 2
dif f ← v[i + 1] − v[i]
EndIf
EndFor
Return max(maxLen, len)
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul g˘ases, te lungimea celei mai lungi progresii aritmetice consecutive din
vector;
B. Complexitatea este O(n);
C. Pentru un vector cu valori constante returneaz˘a n;
D. Pentru un vector cu elemente distincte returneaz˘a ˆıntotdeauna 2.
147. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde v este un vector de n numere ˆıntregi
(−109 ≤ v[1], v[2], . . . , v[n] ≤ 109), iar n este un num˘ar natural nenul (1 ≤ n ≤ 103).
Algorithm ceFace(v, n)
92

Subiect · pagina 98

Subprograme Probleme
result ← 0
For i ← 1, n execute
For j ← i, n execute
If v[i] = v[j] then
result ← max(result, j − i)
EndIf
EndFor
EndFor
Return result
EndAlgorithm
Subprogramul max(a,b) returneaz˘a maximul dintre cele doua numere, unde a s, i b
numere ˆıntregi.
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul g˘ases, te distant, a maxim˘a ˆıntre dou˘a elemente egale;
B. Are complexitate O(n);
C. Pentru un vector cu elemente distincte returneaz˘a 0;
D. Pentru un vector cu elemente constante returneaz˘a n − 1.
148. ✓ ?Se consider˘a algoritmul ceFace(v, n, k), unde v este un vector de n numere ˆıntregi
(−109 ≤ v[1], v[2], . . . , v[n] ≤ 109), 1 ≤ n ≤ 103, iar k este un num˘ar natural nenul
(1 ≤ k ≤ n).
Algorithm ceFace(v, n, k)
sum ← 0
For i ← 1, k execute
sum ← sum + v[i]
EndFor
maxSum ← sum
For i ← k + 1, n execute
sum ← sum + v[i] − v[i − k]
maxSum ← max(maxSum, sum)
EndFor
Return maxSum
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul g˘ases, te suma maxim˘a a k elemente consecutive;
B. Are complexitate O(n · k);
C. Pentru k = 1 returneaz˘a maximul din vector;
D. Pentru k = n returneaz˘a suma tuturor elementelor.
149. ✓ ?Se consider˘a algoritmul ceFace(n), unde n este un num˘ar natural (1 ≤ n ≤ 109).
Algorithm ceFace(n)
result ← 0
While n > 0 execute
cif ra ← n mod 10
If cif ra mod 2 = 0 then
result ← result · 10 + cif ra
93

Subiect · pagina 99

Subprograme Probleme
EndIf
n ← n DIV 10
EndWhile
temp ← 0
While result > 0 execute
temp ← temp · 10 + result mod 10
result ← result DIV 10
EndWhile
Return temp
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul p˘astreaz˘a doar cifrele pare din num˘ar ˆın ordinea lor init, ial˘a;
B. Pentru un num˘ar care cont, ine doar cifre impare returneaz˘a 0;
C. Are complexitate O(log n);
D. Modific˘a ordinea cifrelor ˆın num˘arul rezultat.
150. ✓ ?Se consider˘a algoritmul ceFace(v, n), unde v este un vector de n numere ˆıntregi
(−109 ≤ v[1], v[2], . . . , v[n] ≤ 109), iar n este un num˘ar natural nenul (1 ≤ n ≤ 106).
Algorithm ceFace(v, n)
result ← 0
count ← 0
For i ← 1, n execute
If v[i] > 0 then
count ← count + 1
If count > result then
result ← count
EndIf
Else
count ← 0
EndIf
EndFor
Return result
EndAlgorithm
Care dintre urm˘atoarele afirmat, ii sunt adev˘arate?
A. Algoritmul g˘ases, te lungimea celei mai lungi secvent, e de numere pozitive conse-
cutive;
B. Pentru un vector cu toate elementele negative returneaz˘a 0;
C. Complexitatea este O(n2);
D. Pentru un vector cu toate elementele pozitive returneaz˘a n/2.
94

Subiect · pagina 100

7
Recursivitate
Acest capitol acoper˘a
• ˆInt, elegerea conceptului de recursivitate s, i elementele sale fundamentale
• Aplicarea modelului matematic s, i ecuat, iilor de recurent, ˘a
7.1 Teorie
Recursivitatea este o tehnic˘a fundamental˘a ˆın programare care permite rezolvarea proble-
melor complexe prin descompunerea lor ˆın subprobleme mai simple. Un algoritm recursiv
este un algoritm care se autoapeleaz˘a pentru a rezolva o problem˘a mai mic˘a de acelas, i
tip, reprezentˆand o implementare direct˘a a principiului matematic al induct, iei.[2]
Elementele Fundamentale ale Recursivit˘at, ii
• Cazul de baz˘a (condit, ia de terminare):
– Reprezint˘a scenariul trivial al problemei, care poate fi rezolvat direct
– Asigur˘a convergent, a algoritmului, prevenind buclele infinite
– Pot exista unul sau mai multe cazuri de baz˘a
• Pasul recursiv:
– Reduce problema curent˘a la una sau mai multe instant, e mai simple
– Fiecare apel recursiv apropie execut, ia de cazul de baz˘a
Tipuri de Recursivitate
• Recursivitate liniar˘a:
– Implic˘a un singur apel recursiv per execut, ie
– Exemplu: calculul factorialului, c˘autare binar˘a
• Recursivitate arborescent˘a:
– Implic˘a multiple apeluri recursive per execut, ie
– Exemplu: Fibonacci recursiv naiv
• Recursivitate indirect˘a (mutual˘a):
– Apare atunci cˆand funct, iile se apeleaz˘a reciproc
– Este util˘a ˆın procesarea structurilor de date complexe
Deschide documentul original

Răspunsuri directe

Ce trebuie să știi despre acest subiect?

Ce document de admitere este acesta?

Pagina prezintă model de pregătire din 2026 pentru Informatică, la Facultatea de Matematică și Informatică. Documentul este etichetat după instituție, facultate, program și tipul probei folosind inventarul public verificat. Consultă metodologia actuală a instituției pentru condițiile examenului viitor.

Există și barem sau răspunsuri pentru acest subiect?

Nu există un barem public asociat în inventarul verificat pentru acest document. ProfesorBun nu generează și nu inventează răspunsuri oficiale. Poți folosi subiectul pentru antrenament, dar corectarea trebuie făcută cu metodologia instituției, cu materiale oficiale suplimentare sau împreună cu un profesor.

Cum folosesc acest subiect în pregătirea pentru admitere?

Rezolvă documentul fără ajutor și respectă timpul prevăzut de metodologia examenului. Corectează cu baremul disponibil, marchează capitolele unde ai pierdut puncte și repetă exerciții similare. Compară apoi cu alte probe din aceeași facultate și confirmă programa curentă pe site-ul oficial al instituției.