Documente Academic
Documente Profesional
Documente Cultură
CULEGERE DE PROBLEME
PENTRU ADMITERE
Informatică
TIMIŞOARA
2021
Cuprins
2
Capitolul 1
Tematică
Prelucrări asupra cifrelor (extragerea şi analiza cifrelor unui număr natural)
Probleme
1. Fie n un număr natural nenul. Descrieţi algoritmi pentru:
3
2. Cifra destinului. Cifra destinului este cifra obţinută prin adunarea cifrelor ce
intervin ı̂n data naşterii; adunarea cifrelor rezultatului obţinut se repetă până se
ajunge la o singură cifră. De exemplu, pentru 01.02.1999 se obţine: 1 + 2 + 1 +
9 + 9 + 9 = 31 → 3 + 1 = 4. Descrieţi un algoritm care calculează cifra destinului
pornind de la data nas, terii specificată prin cele trei valori (zi, lună, an).
3. Numere asemenea. Două numere naturale sunt asemenea dacă scrierile celor
două numere ı̂n baza 10 au aceleas, i cifre. De exemplu, numerele 23326 s, i 623
sunt asemenea, deoarece mult, imea cifrelor este aceeas, i ({2, 3, 6}). Descrieţi un
algoritm care preia o pereche de numere naturale s, i determină dacă sunt sau nu
asemenea.
7. Descrieţi un algoritm care, pentru două numere naturale nenule a şi b, determină
numitorul şi numărătorul fracţiei ireductibile egale cu ab .
8. Să se descrie un algoritm care verifică dacă un număr n este prim sau nu, folosind
teorema lui Wilson. (Condit, ia necesară s, i suficientă ca un număr natural p, p > 1,
să fie prim este ca (p − 1)! + 1 să fie divizibil cu p.)
9. Să se descrie un algoritm care afişează toate numerele prime dintr-un interval
dat [a, b], a, b numere naturale, a < b.
4
10. Se consideră un număr natural n > 2. Descrieţi un algoritm care să afis, eze toate
numerele x mai mici decât n, care au proprietatea că x − 1 s, i x + 1 sunt numere
prime. Exemplu: pentru n = 43, se vor afis, a numerele: 4 6 12 18 30 42.
11. Scriet, i un algoritm care afişează descompunerea unui număr natural n ı̂n factori
primi. De exemplu, pentru n = 18, se va afişa 2ˆ1 × 3ˆ2.
12. Să se scrie un algoritm care, pentru numărul natural n dat, determină sumele:
(a) S = 1 × 2 + 2 × 3 + 3 × 4... + n × (n + 1)
(b) S = 1 × n + 2 × (n − 1) + 3 × (n − 2) + ... + n × 1
13. Estimaţi cu precizia ε > 0 limitele s, irurilor următoare (pentru punctele (a) şi (b)
se consideră că x este o valoare dată din intervalul (0, 1)):
i x2i+1
(a) sn = ni=0 (−1)
P
(2i+1)!
i x2i
(b) sn = ni=0 (−1)
P
(2i)!
Indicaţie. Calculul se opreşte atunci când diferenţa dintre doi termeni consecutivi
ai s, irului este mai mică decât constanta ε(|sn − sn−1 | < ε, ε = 0.001).
14. Să se scrie un algoritm care determină dacă un număr natural dat m face parte
din s, irul lui Fibonacci sau nu. S, irul lui Fibonacci este definit prin relat, iile:
f (0) = 1, f (1) = 1, f (n) = f (n − 1) + f (n − 2), pentru n ≥ 2. Nu se vor folosi
tablouri.
Tematică
Algoritmi de prelucrare a datelor simple şi exemple de utilizare a subprogramelor
(funcţii şi proceduri) s, i a diferitelor tipuri de parametri (parametri de intrare, ies, ire,
intrare/ies, ire) s, i variabile (locale, globale). Tipuri de prelucrări:
Prelucrări asupra cifrelor (extragerea şi analiza cifrelor unui număr natural)
Prelucrări ale unor secvenţe de valori preluate secvenţial (fără să fie stocate ı̂n
structuri de tip tablou)
Prelucrări asupra unor mult, imi de puncte ı̂n plan, date prin coordonatele lor
carteziene
5
Probleme
1. Se asociază unui număr natural n valoarea A(n) ca fiind suma factorialelor ci-
frelor lui n (de exemplu, pentru n = 318, A(n) = 3! + 1! + 8!).
(a) Pentru o valoare n dată să se calculeze A(n). Calculaţi numărul de operaţii
de ı̂nmulţire efectuate. Propuneţi o variantă care să utilizeze un număr cât
mai mic de operaţii de ı̂nmulţire.
(b) Pentru o valoare naturală k (k < 9999) să se determine cel mai mic număr
natural n cu proprietatea că A(n) = k.
2. Determinaţi cel mai mic şi cel mai mare număr constituit din k cifre (k < 5)
având proprietatea că suma cifrelor este S. Date de test: k = 3, S = 25; k =
4, S = 33; k = 4, S = 12.
Date de test: P1 (2, 5)P2 (1, 4)P3 (1, 2)P4 (2, 1)P5 (5, 1)P6 (8, 1)P7 (9, 3)P8 (8, 5)P9 (5, 5)
6. Se citeşte succesiv o secvenţă de n valori reale care conţine cel puţin o va-
loare pozitivă. Să se determine indicele de ı̂nceput şi indicele de sfârşit ale unei
subsecvenţe de elemente consecutive care satisface:
6
(a) Este cea mai lungă subsecvenţă crescătoare din secvenţa dată.
(b) Suma elementelor subsecvenţei este maximă (ı̂n raport cu sumele altor
subsecvenţe din secvenţă).
Conjectura Collatz afirmă faptul că pentru orice valoare de pornire n, secvenţa
va ajunge la 1. Pentru un număr natural n se defineşte L(n) ca fiind lungimea
secvenţei, adică numărul de elemente din secvenţă până la ı̂ntâlnirea valorii 1
(inclusiv valoarea 1). Două numere, n1 şi n2 , se consideră Collatz-echivalente
dacă L(n1 ) = L(n2 ). Pentru două valori naturale, a şi b (a < b), să se determine
toate perechile de numere Collatz-echivalente din mult, imea {a, a + 1, . . . , b}.
Tematică
Declararea s, i parcurgerea tablourilor unidimensionale
7
Sortarea tablourilor
Interclasarea tablourilor
Secvent, e de vectori
Probleme
1. Parcurgere şi construire tablouri. Se consideră două tablouri, A s, i B, având
fiecare n elemente numere ı̂ntregi. Să se scrie câte o funcţie/procedură cores-
punzătoare următoarelor probleme:
(a) Considerăm că A şi B au aceeaşi lungime: se cere să se construiască un
tablou C care conţine elementele comune, care apar atât ı̂n A cât şi ı̂n B
pe aceeaşi poziţie, dacă nu există acelaşi element se va pune 0 ı̂n tabloul C.
(b) Calculează suma elementelor din A care apar şi ı̂n B pe aceeaşi poziţie.
(c) Construieşte un tablou D care conţine pe poziţia i suma elementelor cores-
pondente din A şi B. Dacă au dimensiuni diferite, D va conţine o copie a
elementului din tabloul mai lung.
2. Conversii ı̂ntre baze de numeraţie (utilizând tablouri).
(a) Se consideră că numărul natural nenul n este reprezentat ı̂n baza 10 şi se
doreşte construirea tabloului de caractere care sa conţină cifrele numărului.
(b) (generalizare a) Se consideră că numărul natural nenul n este reprezentat
ı̂n baza 10 şi se doreşte construirea numărului m care reprezintă aceeaşi
valoare, ı̂nsă ı̂n baza b (2 ≤ b ≤ 9). Numărul m va fi reprezentat printr-un
s, ir de caractere.
(c) Se consideră un tablou (B) de ı̂ntregi care conţine doar 0 sau 1. Tabloul
cont, ine reprezentarea ı̂n baza 2 a unui număr natural şi se pune problema
construirii unui tablou (H) care conţine reprezentarea ı̂n baza 16. De exem-
plu, pentru B = 10110011 se obţine H = B3.
(d) Se consideră un şir de caractere care conţine reprezentarea ı̂n baza 16 a unui
număr (alfabetul folosit este ‘0’, ‘1’,. . . , ‘A’,. . . ,‘F ’) şi se pune problema
determinării valorii corespunzătoare ı̂n baza 10. De exemplu, pentru B9F
se obţine 2975.
3. Reprezentarea ı̂n complement fat, ă de 2. Numerele ı̂ntregi negative sunt repre-
zentate intern prin regula complementului fat, ă de 2 care constă ı̂n aplicarea
următoarelor etape: i) se determină reprezentarea ı̂n binar a numărului fără
semn s, i se complementează tot, i bit, ii (un bit 0 se transformă ı̂n 1, iar un bit 1
se transformă ı̂n 0); ii) se adună 1 la numărul anterior (folosind regulile de adu-
nare ı̂n baza 2). Ceea ce se obt, ine este reprezentarea internă a numărului ı̂ntreg
negativ. Dacă se dă o reprezentare internă hexazecimală (0xA2B3C4D5), prin
examinarea bitului de semn (cel mai din stânga) se decide dacă numărul este
negativ sau nu. Dacă numărul este negativ, atunci se vor aplica aceleas, i reguli
pentru a determina valoarea numărului. Să se scrie o funct, ie care să compare
două numere ı̂ntregi pe 32 de bit, i pentru care se cunoas, te reprezentarea internă
ı̂n hexazecimal. Funct, ia va returna
8
(a) −1 dacă primul număr este mai mic decât al doilea;
(b) 0 dacă sunt egale;
(c) 1 dacă primul număr este mai mare decât al doilea.
1/(2 ∗ 3 ∗ 4), 1/(4 ∗ 5 ∗ 6), 1/(6 ∗ 7 ∗ 8), . . . până la 1/(200 ∗ 201 ∗ 202)
Presupunând că numele tabloului este data, parcurget, i tabloul pentru a calcula
următoarea expresie:
data[0]−data[1]+data[2]−data[3] + · · · −data[99]
Înmult, it, i rezultatul obt, inut anterior cu 4.0 s, i adăugat, i 3.0 s, i afis, at, i rezultatul.
Recunoas, tet, i valoarea obt, inută?
9
Maşina Ora start Durata
1 1 4
2 1 6
3 5 4
4 10 3
5 7 4
timpii de intrare ı̂n spălătorie : [8 : 00, 8 : 05, 8 : 05, 8 : 08, 8 : 32, 8 : 37, 8 :
43, 8 : 45 . . . ]
numărul de fise folosite: [2, 3, 4, 2, 1, 2, 3, 4 . . . ]
Se cere să se genereze ı̂ntâi datele de intrare (istoricul unei zile la spălătorie):
(a) Se va genera ora s, i minutul pentru fiecare dintre timpii de intrare apoi se
vor ordona crescător după oră s, i minute.
(b) Se va genera aleator numărul de fise folosite, un număr ı̂ntre 1 s, i 5.
S, tiind că o fisă durează 2 minute la care se va adăuga 1 minut, timpul
pierdut pentru pregătire, se cere să se implementeze funct, ii/proceduri co-
respunzătoare următoarelor probleme:
(c) Ştiind că o fisă costă 2.5 lei să se calculeze profitul zilei.
(d) Să se determine pentru fiecare maşină care este ora la care iese din spălătorie.
(e) Să se determine pentru fiecare maşină dacă trebuie să aştepte sau nu ca să
intre ı̂ntr-o boxă.
(f) Să se determine care este cel mai lung timp de aşteptare.
10
Presupunem că ı̂n fiecare lună va fi câte un concurs de GrandSlam s, i ştim că
pentru GrandSlam se pot câs, tiga următoarele puncte
(W=winner, F=Finalist, . . . )
Fiecare dintre jucătoarele din top 10 ar putea să câs, tige oricare meci s, i oricare
turneu.
S-a terminat turneul, se cunosc rezultatele şi ce s-a ı̂ntâmplat anul trecut:
Având ı̂n vedere că fiecare punct câştigat anterior trebuie apărat, se pune ı̂ntre-
barea dacă Simona Halep va fi sau nu numărul 1 după acest turneu?
9. Analiză zaruri. Bogdan are 2 zaruri cu câte 6 fet, e fiecare, unul albastru s, i unul
ros, u. Le aruncă pe o masă de 100 de ori s, i ı̂s, i notează valorile obt, inute pentru
fiecare zar ı̂n parte (ı̂n câte un tablou cu 100 de elemente pentru fiecare zar). Să
se decidă care dintre cele 2 zaruri este cel mai echilibrat zar? Cel albastru sau
cel roşu?
Notă: Se va folosi formula entropiei lui Shannon pentru a determina cantitatea
de informat, ie existentă ı̂n fiecare zar. Zarul cu entropia mai mare este consi-
derat mai echilibrat. Dacă (f1 , f2 , . . . , f6 ) reprezintă frecvenţele relative asoci-
ate valorilor obţinute la aruncarea unui zar, regula de calcul a entropiei este
−f1 × log2 (f1 ) − f2 × log2 (f2 ) − · · · − f6 × log2 (f6 ), entropie mai mare ı̂nseamnă
mai echilibrat.
10. Sufix şi prefix comun. Fiind date două tablouri (a1 , a2 , . . . , am ) şi (b1 , b2 , . . . , bn ),
cu numere ı̂ntregi, să se stabilească numărul maxim de elemente comune aflate
la sfârşitul lui a şi ı̂nceputul lui b (de exemplu, a = (1, 4, 3, 5, 6, 7, 2) şi b =
(6, 7, 2, 5, 1, 8) au 3 elemente comune, pe 6, 7 şi 2).
11. Date de naştere. Se consideră o listă care conţine datele de naştere ale locuitorilor
unui oraş (lista poate fi reprezentată printr-un tablou conţinând structuri sau
prin 3 tablouri corespunzătoare celor 3 componente ale date: (zi, lună, an)). Să
se determine:
11
(a) cea mai “mică” dată de naştere (corespunzătoare celui mai vârstnic locui-
tor);
(b) cea mai “mare” dată de naştere (corespunzătoare celui mai tânăr locuitor);
(c) cea/cele mai frecventă/frecvente dată/date de naştere (cea/cele care apa-
re/apar de cele mai multe ori ı̂n listă);
(d) dacă există vreo zi ı̂n perioada (1 ianuarie 1918 – 31 decembrie 2017) ı̂n
care nu e născut niciun locuitor.
Tematică
Construire, parcurgere şi transformare
Aplicat, ii
Probleme
1. Să se verifice dacă o valoare x se găseşte ı̂ntr-o matrice cu m linii s, i n coloane.
Indicat, ie: Se parcurge matricea pe linii, apoi pe coloane, iar la prima ı̂ntâlnire a
elementului căutat ne oprim.
12
7. Să se verifice dacă o matrice pătratică de dimensiune n × n este pătrat magic
(suma elementelor de pe fiecare linie, coloană, diagonala principală şi diagonala
2 2
secundară este aceeaşi şi este egală cu n (n2 +1) şi memorează toate valorile de la
1 la n2 ).
6 1 8
Exemplu: 7 5 3 .
2 9 4
6 0 8 5 10 5
Contraexemple: 7 5 3 , 11 5 4 .
2 9 4 3 3 14
8. Se citesc de la tastatură dimensiunile unei matrici s, i elementele ei. Se cere
transformarea matricii prin inversarea ordinii elementelor ı̂n cadrul fiecărei linii.
1 2 3 4 5 5 4 3 2 1
Exemplu: Pentru matricea 3 4 1 2 1 se obt, ine 1 2 1 4 3 .
2 3 4 1 8 8 1 4 3 2
9. Pentru o matrice cu n linii s, i m coloane, care memorează numere ı̂ntregi, modificat, i
ordinea elementelor astfel ı̂ncât parcurgând matricea de sus ı̂n jos şi de la stânga
la dreapta aceasta să conţină mai ı̂ntâi elementele negative, apoi pe cele pozitive.
Se va analiza atât varianta ı̂n care se poate utiliza un tablou adit, ional (cu m × n
elemente), cât s, i varianta ı̂n care nu se utilizează tablou adit, ional.
−5 6 −8 3 −5 −9 −8 −8
Exemplu: Pentru matricea 2 −9 1 −6 se obt, ine −6 −2 1 2 .
8 1 −8 −2 8 1 3 6
10. Se consideră o reţea de n calculatoare şi o matrice pătratică de dimensiune n care
conţine elemente din {0, 1} completate astfel: a[i, j] = 1 dacă calculatorul i este
conectat direct cu calculatorul j şi a[i, j] = 0 ı̂n caz contrar. Scrieţi algoritmi
care verifică dacă:
(a) reţeaua este complet conectată (a[i, j] = 1 pentru fiecare pereche (i, j) de
valori diferite)
(b) reţeaua este de tip inel (a[i, i + 1] = a[i + 1, i] = 1 pentru fiecare i din
1, . . . , n − 1 şi a[n, 1] = a[1, n] = 1, iar celelalte elemente sunt nule)
(c) reţeaua este de tip stea (există un i∗ cu proprietatea că a[i, i∗ ] = a[i∗ , i] = 1,
pentru orice i 6= i∗ , iar celelalte elemente sunt nule).
Notă: Considerăm că un calculator nu este conectat cu el ı̂nsus, i, astfel că a[i, i] =
0, pentru fiecare i.
11. Se consideră o imagine color de dimensiune n×n pixeli. S, tiind că fiecărui pixel ı̂i
corespund trei valori din mult, imea {0, 1, . . . , 255} (câte una pentru fiecare dintre
cele trei canale de culoare - ros, u, verde s, i albastru) propunet, i o structură de date
pentru stocarea imaginii. Descriet, i un algoritm care:
(a) transformă imaginea color ı̂ntr-o imagine pe nivele de gri folosind pentru
fiecare pixel regula:
13
max (ros, u,verde,albastru)+min(ros, u,verde,albastru)
gri = 2
Indicat, ie: Putem asimila o imagine cu 3 matrici, Mr – matricea pixelilor ros, ii,
Mv – matricea pixelilor verzi, Ma – matricea pixelilor albas, tri. Atunci structura
de date este tuplul format din cele 3 matrici. Pentru rezolvarea punctului (a) se
folosesc 2 funct, ii auxiliare de calcul al maximului/minimului dintre două numere,
iar ca operat, ie principală este adunarea de matrici. La punctul (b) se t, ine cont
de faptul că tabloul de frecvent, e are lungimea de 256. Punctele (b) s, i (c) sunt
aplicat, ii la adunarea a două matrici, conceptul de adunare a elementelor din
matrice. Punctele (d) s, i (e) testează proprietăt, i ale matricilor.
Tematică
Descrierea algoritmilor recursivi
Tehnici recursive
14
Proceduri s, i funct, ii recursive
Exemple
Probleme
1. Să se determine cel mai mare divizor comun a două numere naturale (cmmdc)
folosind o implementare recursivă a algoritmului lui Euclid bazat pe scăderi
repetate.
2. Să se determine cel mai mare divizor comun a două numere naturale (cmmdc)
folosind o implementare recursivă a algoritmului lui Euclid bazat pe ı̂mpărt, iri
repetate.
3. În matematică, factorialul unui număr natural n (folosit adesea ı̂n algebră, com-
binatorică s, i analiza matematică), notat cu n!, este produsul tuturor numerelor
naturale mai mici sau egale cu n. Prin convent, ie, 0! este egal cu 1. Să se scrie o
funct, ie recursivă pentru calculul valorii factorialului unui număr ı̂ntreg dat.
4. Cu ajutorul unei funct, ii recursive, să se verifice dacă un număr natural este
factorialul unui alt număr natural.
5. S, irul lui Fibonacci este un s, ir de numere naturale ı̂n care, cu except, ia primilor doi
termeni egali cu 1, ceilalt, i termeni reprezintă suma celor doi anteriori. Acest s, ir
este unul dintre cele mai populare s, iruri specificate printr-o relat, ie de recurent, ă.
(a) Să se scrie o funct, ie recursivă care determină valoarea termenului din s, ir de
un rang specificat.
(b) Să se scrie o funct, ie recursivă care determină rangul primului termen care
atinge sau depăs, es, te o valoare dată.
7. Înt, elegem prin răsturnatul unui număr, numărul obt, inut atunci când cifrele se
parcurg ı̂n ordinea inversă celei naturale (cea mai din stânga cifră este cifra
unităt, ilor, următoarea spre dreapta este cifra zecilor s, .a.m.d.). Să se scrie o
funct, ie recursivă care generează răsturnatul unui număr natural primit ca para-
metru.
8. Scriet, i o funct, ie recursivă care verifică dacă numărul natural primit ca parametru
poate fi scris ca sumă de termeni din s, irul lui Fibonacci.
9. Să se scrie o funct, ie recursivă pentru descompunerea ı̂n factori primi a unui
număr natural.
10. Să se scrie o funct, ie recursivă pentru calculul valorii lui 2 la puterea n.
15
11. Scriet, i o funct, ie recursivă pentru calculul combinărilor de n luate câte k.
14. Se consideră un număr natural care cont, ine cel mult 9 cifre s, i se pune problema
determinării numărului de cifre distincte ale numărului. Rezolvat, i problema
folosind una sau mai multe funct, ii recursive.
De exemplu, pentru n = 41242, se obt, ine 3 (cifrele distincte sunt 4, 1, 2).
Tematică
Sortare prin insert, ie
Tehnica interclasării
Căutare binară
Probleme
1. Să se scrie un program care ordonează crescător elementele din prima jumătate a
unui vector s, i descrescător elementele din a doua jumătate. Numărul de elemente
ale vectorului este par.
Exemplu: Vectorul 8 2 9 4 5 7 după sortare devine 2 8 9 7 5 4.
2. Se consideră un set de obiecte caracterizate prin dimensiune şi culoare (sunt trei
culori posibile: roşu, alb, albastru). Să se ordoneze obiectele după culoare (prima
dată obiectele roşii, apoi cele albe şi la final cele albastre) astfel ı̂ncât obiectele
cu aceeaşi culoare să fie ordonate crescător după dimensiune.
Exemplu
16
Intrare: (4, alb), (3, ros, u), (6, ros, u), (5, albastru), (2, alb), (2, ros, u), (4,
albastru), (1, ros, u)
Ies, ire: (1, ros, u), (2, ros, u), (3, ros, u), (6, ros, u), (2, alb), (4, alb), (4,
albastru), (5, albastru)
9. Se dau două şiruri, cu n, respectiv m elemente, numere naturale. Primul şir este
ordonat crescător, iar al doilea este ordonat descrescător. Să se afişeze, ı̂n ordine
crescătoare, valorile pare din cele două şiruri.
Exemplu
17
Intrare: 5 (numărul de elemente ale s, irului 1), 2 4 7 37 42 (elementele
s, irului 1)
8 (numărul de elemente ale s, irului 2), 88 88 67 45 42 32 4 1 (elementele
s, irului 2)
Ies, ire: 2 4 4 32 42 42 88 88
Indicat, ie: Folosit, i tehnica interclasării.
10. Se dă un număr natural x s, i două tablouri a s, i b, cu n, respectiv m elemente,
numere naturale, ordonate strict crescător. Să se afis, eze, ı̂n ordine crescătoare,
multiplii lui x care se află doar ı̂n unul dintre cele două s, iruri.
Indicat, ie: Se parcurg cele două tablouri ı̂n paralel (ı̂n manieră balansată).
Dacă a[i] = b[j] atunci se ignoră s, i se progresează ı̂n ambele tablouri,
Altfel se verifică dacă valoarea mai mică (dintre a[i] s, i b[j]) este multiplu al
lui x (dacă este, se ret, ine valoarea) s, i se progresează ı̂n tabloul care cont, ine
valoarea mai mică.
11. La sect, ia de ı̂mpachetare a produselor dintr-o fabrică lucrează n muncitori. Fie-
care muncitor ı̂mpachetează acelas, i tip de produs s, i, pentru fiecare, se cunoas, te
timpul necesar pentru ı̂mpachetarea unui obiect. Să se determine durata minimă
de timp ı̂n care vor ı̂mpacheta cei n muncitori cel put, in M obiecte.
Exemplu
Intrare: 6 (număr muncitori), 60 (număr obiecte), 4 7 3 6 7 1 (durate)
Ies, ire: 30
Indicat, ie: Se simulează câte un “cronometru” pentru fiecare muncitor utilizând
un vector ale cărui elemente se incrementează până ajung la valoarea cores-
punzătoare timpului necesar ı̂mpachetării unui obiect (moment ı̂n care se mar-
chează faptul că s-a finalizat ı̂mpachetarea unui obiect s, i se resetează “cronome-
trul”).
12. Fiind dat un tablou de numere ı̂ntregi nesortate, transformat, i tabloul astfel ı̂ncât
să fie sortat ı̂n formă de “undă”. Un tablou arr[0...n − 1] este sortat ı̂n formă
de undă dacă arr[0] ≥ arr[1] ≤ arr[2] ≥ arr[3] ≤ arr[4] ≥ ....
Exemplu
Intrare: arr[] = {10, 5, 6, 3, 2, 20, 100, 80}
Ies, ire: arr[] = {10, 5, 6, 2, 20, 3, 100, 80} sau {20, 5, 10, 2, 80, 6, 100, 3} sau
alt tablou care respectă această formă
18
13. Fiind dată o mult, ime de intervale, verificat, i dacă se suprapun două dintre acestea.
Exemplu
Intrare: arr[] = {[1, 3], [5, 7], [2, 4], [6, 8]}
Ies, ire: Adevărat. Intervalele [1, 3] s, i [2, 4] se suprapun
Intrare: arr[] = {[1, 3], [7, 9], [4, 6], [10, 13]}
Ies, ire: Fals. Nu există nicio pereche de intervale care să se suprapună
14. Se consideră un vector de numere distincte init, ial sortat ı̂n ordine crescătoare.
Vectorul a fost rotit ı̂n sensul acelor de ceasornic de k ori. Pornind de la vectorul
rotit, determinat, i valoarea lui k.
Exemplu:
Explicat, ie: Vectorul init, ial este {2, 3, 6, 12, 15, 18}. Din el se obt, ine vectorul dat
după 2 rotat, ii.
Indicat, ie: Se determină cel mai mic indice i cu proprietatea că valoarea ele-
mentului de pe pozit, ia i este mai mare decât valoarea elementului de pe pozit, ia
i + 1.
Tematică
Algoritmi de prelucrare a s, irurilor de caractere:
Observat, ie: Problemele se vor rezolva fără a folosi funct, ii predefinite de prelucrare
a s, irurilor de caractere.
19
Probleme
1. Se dă un text de maxim 256 de caractere. Să se afle următoarele informat, ii
despre textul dat.
(a) Câte propozit, ii cont, ine textul? Separatorii de propozit, ie se consideră ca-
racterele: “”, “!” s, i “?”.
Obiectiv: Identificarea propozit, iilor din text
Indicat, ie: Se va defini o funct, ie care primes, te ca parametru textul s, i va
ı̂ntoarce numărul de propozit, ii din text.
În cadrul funct, iei se declară un tablou cu separatorii de propozit, ie.
Apoi se parcurge textul caracter cu caracter s, i se verifică dacă caracterul
curent se află ı̂n tabloul de separatori. Dacă da se va incrementa o variabilă
care ret, ine numărul de propozit, ii din text.
Observat, ie: Se presupune că nu există 2 separatori de propozit, ie unul după
altul de exemplu textul “Of!!!!!” nu este valid.
(b) Pentru fiecare dintre propozit, iile din text să se determine numărul de cu-
vinte. Cuvintele unei propozit, ii sunt separate printr-un singur spat, iu. Scri-
et, i o funct, ie care ı̂ntoarce cea mai lungă propozit, ie din text (lungimea unei
propozit, ii este definită ca fiind numărul de cuvinte pe care le cont, ine).
Obiectiv: Identificarea cuvintelor din text, calcul maximului dintr-o secvent, ă
de valori
Indicat, ie: Se va defini o funct, ie care primes, te ca parametru textul s, i va
ı̂ntoarce numărul maxim de cuvinte dintr-o propozit, ie.
În cadrul funct, iei se declară un tablou cu separatorii de propozit, ie.
Apoi se parcurge textul caracter cu caracter s, i se verifică dacă caracterul
curent este spat, iu. Dacă da, se va incrementa o variabilă care ret, ine numărul
de cuvinte din text.
Observat, ie: Atent, ie la ultimul cuvânt din text, dacă după el nu este spat, iu
nu se va număra.
(c) Scriet, i o funct, ie care returnează numărul de vocale s, i consoane din textul
dat.
Obiectiv: Parcurgerea unui text, numărarea caracterelor care apart, in unei
mult, imi
Indicat, ie: Se va defini o funct, ie care primes, te ca parametri textul s, i două
referint, e ı̂n care se vor stoca (ı̂ntoarce) numărul de consoane s, i numărul de
vocale.
În cadrul funct, iei se declară un tablou care cont, ine vocalele (litere mari s, i
mici).
Apoi se parcurge textul caracter cu caracter s, i se verifică dacă caracterul
curent este ı̂n intervalul [‘a’ . . . ‘z’] sau [‘A’ . . . ‘Z’]. Dacă este literă,
se verifică dacă apart, ine mult, imii de vocale şi, ı̂n caz afirmativ, se cres, te
numărul de vocale, altfel se cres, te numărul de consoane.
2. Anagrame (un cuvânt este anagrama altui cuvânt dacă este constituit din aceleas, i
litere dar ı̂n altă ordine). De exemplu, “arc” este anagramă a cuvântului “rac”.
20
(a) Să se scrie o funct, ie care să verifice dacă, ı̂ntr-o pereche de cuvinte, un
cuvânt este anagrama celuilalt cuvânt.
Obiectiv: Verificarea proprietăt, ilor unui cuvânt
Indicat, ie: Se va defini o funct, ie care primes, te ca parametri două cuvinte
(s, iruri de caractere) s, i ı̂ntoarce o valoare care specifică dacă cuvintele sunt
sau nu anagrame.
Dacă cuvintele nu au aceeas, i lungime ele nu sunt anagrame.
Dacă cuvintele au aceeas, i lungime:
se construiesc vectori de frecvent, e pentru fiecare cuvânt (de câte ori
apare o literă ı̂n cuvânt);
se verifică dacă vectorii de frecvent, e sunt identici, iar ı̂n caz afirmativ
cuvintele sunt anagrame.
Observat, ie: O altă implementare se poate baza pe construirea mult, imii de
litere pentru fiecare cuvânt ı̂n ordine crescătoare s, i apoi se verifică dacă cele
două mult, imi sunt identice.
(b) Să se scrie o funct, ie care verifică dacă o mult, ime de cuvinte este formată din
anagrame ale aceluias, i cuvânt. De exemplu, mult, imea “arc”, “rac”, “car”
satisface proprietatea cerută.
Obiectiv: Verificarea proprietăt, ilor unei mult, imii
Indicat, ie: Se va defini o funct, ie care primes, te ca parametri o mult, ime de
cuvinte (tablou de s, iruri de caractere) s, i ı̂ntoarce o valoare care specifică
dacă toate cuvintele din mult, ime sunt anagrame.
Se defines, te o variabilă care va stoca o valoare (o numim esteAnagrama)
care reprezintă faptul că presupunem că proprietatea pe care vrem sa o
verificăm este adevărată.
Se parcurge mult, imea de cuvinte ı̂ncepând cu al doilea element al mult, imii
s, i se verifică dacă primul element al mult, imii s, i elementul curent sunt ana-
grame (folosind funct, ia definită mai sus). Dacă nu sunt, atunci valoarea
variabilei esteAnagrama se modifică pentru a reflecta că proprietatea nu
mai este satisfăcută.
(c) Să se scrie o funct, ie care afis, ează pentru o mult, ime de cuvinte toate perechile
de cuvinte anagrame.
Obiectiv: Generarea submult, imilor unei mult, imi care verifică o proprietate
Indicat, ie: Se va defini o funct, ie care primes, te ca parametri o mult, ime de
cuvinte (tablou de s, iruri de caractere) s, i va afis, a submult, imile formate din
cuvinte anagramate.
Pentru a rezolva problema putem să considerăm un tablou de aparit, ii care
să ne spună dacă cuvântul a fost sau nu folosit (afis, at).
Se parcurge tabloul de cuvinte s, i, pentru fiecare cuvânt, se verifică dacă
există un alt cuvânt care este anagrama acestuia (folosind funct, ia anterioară
care verifică dacă două cuvinte sunt anagrame). Un cuvânt deja afişat este
marcat (reţinut ı̂n tabloul de apariţii) .
3. Să se genereze pentru un cuvânt dat toate prefixele s, i sufixele acelui cuvânt.
Exemplu: pentru cuvântul “paranteza”
21
prefixele sunt “p”, “pa”, “par”, “para”, “paran”, “parant”, “parante”, “pa-
rantez”
Obiectiv: Generarea unor s, iruri care satisfac anumite proprietăt, i
Indicat, ie: Problema este asemănătoare cu problema afis, ării elementelor unei
matrici aflate sub diagonala principală
Sufixele sunt “a”, “za”, “eza”, “teza”, “nteza”, “anteza”, “ranteza”, “aran-
teza”
Indicat, ie: Problema este asemănătoare cu problema afis, ării elementelor unei
matrici aflate deasupra diagonalei principale
4. Se dă un tablou de cuvinte, format doar din litere mici. Afis, at, i s, irul de litere
din care sunt formate cuvintele ı̂n ordinea descrescătoare a literelor. Exemplu:
pentru mult, imea de cuvinte “ana”, “are”, “mere” se obt, ine rrnmeeeaaa.
Obiectiv: Folosire tablou de frecvent, e
Indicat, ie: Se va defini o funct, ie care primes, te ca parametru un tablou de cuvinte
(eventual lungimea tabloului).
Se va declara un tablou ı̂n care să se poată ret, ine frecvent, a de aparit, ie a fiecărei
litere ı̂n tabloul de cuvinte. Elementele tabloului vor fi init, ializate cu 0.
Se vor parcurge toate elementele tabloului si pentru fiecare element (cuvânt)
se vor parcurge literele din care este format s, i se va incrementa ı̂n tabloul de
frecvent, e valoarea care corespunde indexului din tablou atas, at literei. De exem-
plu dacă litera a apare de 3 ori ı̂n text, frecvent, a atas, ată literei a va fi 3.
După construirea tabloului de frecvent, e, acesta se va parcurge de la sfârs, it spre
ı̂nceput s, i, pentru fiecare valoare diferită de 0, se va crea un ciclu pentru a afis, a
litera de n ori.
5. Se dă un text s, i un cuvânt pe care vrem să ı̂l căutăm ı̂n text. Propunet, i funct, ii
care realizează următoarele variante de căutări:
(a) Identifică prima aparit, ie a cuvântului ı̂n text s, i returnează indexul la care
ı̂ncepe cuvântul căutat (nu folosit, i ı̂n implementarea algoritmului funct, ii
deja implementate ı̂n biblioteci care realizează acelas, i lucru). În cazul ı̂n
care cuvântul nu este prezent ı̂n text va ı̂ntoarce valoarea −1. De exemplu,
pentru textul “Ana are mere” şi cuvântul “are” se va returna 4, iar pentru
cuvântul “care” se va returna −1.
Obiectiv: Găsirea unui subs, ir ı̂ntr-un subs, ir (găsirea primei aparit, ii)
Indicat, ie: Se defines, te o funct, ie care are ca parametri două cuvinte (s, iruri de
caractere) s, i va ı̂ntoarce indexul la care ı̂ncepe prima aparit, ie a subs, irului ı̂n
s, ir (de exemplu pentru s, irul “abcdabcghbc” subs, irul “bc” se găses, te pentru
prima dată la pozit, ia 1, ı̂n cazul ı̂n care indicii ı̂ncep cu 0).
Pentru rezolvare se poate folosi algoritmul fort, ei brute care presupune par-
curgerea secvent, ială a primului s, ir (caracter cu caracter) s, i verificarea fap-
tului dacă nu cumva subs, irul ı̂ncepe la acea pozit, ie.
(b) Identifică toate aparit, iile cuvântului ı̂n text s, i returnează un tablou care
cont, ine indecs, ii la care ı̂ncepe cuvântul căutat.
Obiectiv: Găsirea unui subs, ir ı̂ntr-un subs, ir (găsirea tuturor aparit, iilor)
22
Indicat, ie: De exemplu, pentru s, irul “abcdabcghbc” subs, irul “bc” se găses, te
pe pozit, iile [1, 5, 9].
Se repetă prelucrarea de la subpunctul anterior.
(c) Identifică ultima aparit, ie a cuvântului ı̂n text s, i returnează indexul la care
ı̂ncepe cuvântul căutat, ı̂n caz contrar va ı̂ntoarce valoarea −1.
Obiectiv: Găsirea unui subs, ir ı̂ntr-un subs, ir (găsirea ultimei aparit, ii)
Indicat, ie: De exemplu, pentru s, irul “abcdabcghbc” subs, irul “bc” se găses, te
pe pozit, ia 9.
Pentru rezolvare se poate folosi algoritmul fort, ei brute care presupune par-
curgerea secvent, ială a primului s, ir (caracter cu caracter) s, i verificarea faptu-
lui dacă nu cumva subs, irul ı̂ncepe la acea pozit, ie. În acest caz, pentru a face
algoritmul put, in mai eficient, ı̂n unele cazuri, se poate porni cu verificarea
de la sfârs, itul s, irului.
6. Elevii unei clase trebuie să trimită rezolvările temelor la informatică sub forma
unei arhive zip care trebuie să respecte următorul s, ablon de denumire
clasaX nume premune zi-luna-an.zip. Temele care sunt trimise s, i nu res-
pectă acest format de numire nu vor fi corectate.
Exemplu:
Dacă elevul Ionescu Ion din clasa a noua trimite următorul fis, ier
clasa9 ionescu ion 02-04-2018.zip, tema lui va fi luată ı̂n considerare
pentru corectare.
Dacă elevul Vasilescu Vasile din clasa a unsprezecea trimite următorul fis, ier
clasa 11 vasilescu vasile 02-03 2018.zip, tema lui nu va fi luată ı̂n
considerare pentru corectare.
Cerint, e:
(a) Definit, i o funct, ie care permite profesorului să verifice dacă numele fis, ierului
trimis este corect sau nu (validarea se va face doar din punctul de vedere al
structurii denumirii).
Obiectiv: Verificarea dacă un s, ir de caractere respectă un s, ablon (pattern)
Indicat, ie: Se va căuta, pentru ı̂nceput, dacă există s, iruri de caractere preci-
zate care trebuie să se regăsească pe anumite pozit, ii. De exemplu, subs, irul
“clasa” trebuie să fie la ı̂nceputul cuvântului, iar subs, irul “.zip” la sfârs, itul
cuvântului. Apoi trebuie identificat, i separatorii, ı̂n exemplul curent “ ”
(liniut, ă de subliniere) s, i “-” (cratimă). Apoi se verifică dacă subs, irurile
dintre aces, tia respectă regulile impuse de s, ablon.
(b) Profesorul s, i-a construit un tablou cu nume de fis, iere. Determinat, i câte
fis, iere cu formatul corect au fost trimise.
Obiectiv: Verificarea ı̂ndeplinirii unei proprietăt, i a elementelor unui tablou
Indicat, ie: Se va defini o funct, ie care primes, te ca parametru tabloul de
cuvinte, eventual s, i lungimea tabloului s, i ı̂ntoarce numărul de cuvinte din
s, ir care respectă s, ablonul definit mai sus.
Obiectiv: Crearea unui nou s, ir de caractere pe baza proprietăt, ilor unui alt
s, ir de caractere
23
Indicat, ie: Se va parcurge tabloul de cuvinte s, i se va folosi funct, ia definită
la punctul (a) pentru a verifica dacă fiecare element al tabloului respectă
sau nu s, ablonul. Dacă ı̂l respectă, atunci se va cres, te valoarea variabilei ı̂n
care se ret, ine numărul de elemente care respectă s, ablonul.
(c) Ajutat, i profesorul să creeze o statistică care să ı̂i spună câte teme are de
corectat la fiecare clasă pornind de la tablourile cu nume de fis, iere cores-
punzătoare diferitelor clase (câte fis, iere ı̂n formatul corect au fost trimise
pentru fiecare clasă).
Obiectiv: Creare de tabele de frecvent, ă, identificare chei ale tabelului de
frecvent, ă
Inidicat, ie: Pentru a simplifica problema, vom presupune că clasele sunt de
la 0 la 12 (s, i ı̂n s, coală există o singură clasă pentru fiecare an).
În acest caz, ne putem folosi de ideea de la tabloul de frecvent, e pentru a
număra cât, i elevi au submis fis, iere ı̂n formatul corect, pentru fiecare clasă.
Observat, ie: Încercat, i să rezolvat, i problema ı̂n cazul general, când nu s, tim
câte clase de aceleas, i fel sunt ı̂n s, coală (de exemplu, există clasele 9A, 9B, 9C
s, i clasele 10A, 10B).
24
Se parcurge, caracter cu caracter, s, irul init, ial s, i dacă caracterul e literă,
atunci se adaugă la noul s, ir, iar dacă e cifră, atunci se transformă ı̂n număr
pentru a afla numărul de repetări al literei. După ce am aflat numărul de
repetări ale literei, adăugam la noul s, ir litera, de numărul de ori identificat.
Observat, ie: Numărul de caractere care se repetaa poate fi mai mare de 9,
deci rezultă că cifrele sunt formate din două sau mai multe caractere.
8. Elevii unei clase s, i-au propus să ı̂nvet, e limba păsărească astfel ı̂ncât au nevoie
de un program care să verifice dacă, pornind de la un cuvânt, au identificat
corect cuvântul ı̂n limba păsărească. Scriet, i o funct, ie care verifică dacă cuvântul
din păsărească este corect identificat/codificat. Funct, ia primes, te ca parametri
cuvântul ı̂n limba păsărească s, i cuvântul init, ial s, i ı̂ntoarce o valoare de adevăr
ı̂n funct, ie de codificare. Codificarea ı̂n limba păsărească presupune ı̂nlocuirea
fiecărei vocale astfel: “v” devine “vpv” şi păstrarea nemodificată a consoanelor
(de exemplu, “a” devine “apa”, iar “e” devine “epe”). De exemplu, cuvântul
“capre”, ı̂n păsărească, este “capaprepe”.
Indicat, ie: Se va codifica cuvântul init, ial ı̂n păsărească, apoi se vor verifica dacă
cele două cuvinte sunt identice.
10. Ionel scrie poezii, dar face mici gres, eli de tehnoredactare. Vom ı̂ncerca să ı̂l
ajutăm pe Ionel să corecteze gres, elile le tehnoredactare. Dacă versurile poeziei
sunt stocate ı̂ntr-un tablou de s, iruri de caractere (fiecare element din tablou
cont, ine un vers), trebuie să corectăm următoarele probleme:
Obiectiv: Adăugarea/s, tergerea de caractere dintr-un s, ir de caractere, generarea
de sufixe
(a) Deoarece dorim să folosim cât mai put, ine caractere pentru a stoca poezia,
va trebui să verificăm dacă există caractere albe (spat, ii s, i/sau taburi) la
ı̂nceputul s, i sfârs, itul fiecărui vers s, i să le eliminăm.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument poezia (un tablou
de s, iruri de caractere), eventual numărul de versuri (dimensiunea tabloului).
25
Se va parcurge fiecare vers al poeziei s, i pentru fiecare vers:
se verifică dacă ultimele caractere ale versului sunt caractere albe s, i se
s, terg prin deplasarea terminatorului de s, ir;
se verifică dacă primele caractere sunt caractere albe: dacă da, atunci
se deplasează versul cu un caracter la stânga.
(b) Din gres, eală, Ionel a adăugat mai multe caractere albe (spat, ii s, i taburi)
ı̂ntre două cuvinte, acestea trebuie ı̂nlăturate (de exemplu, “ O, ce păcat
, o, ce păcat”, “Că n-a fost fotografiat”, “ acel moment ı̂nălt, ător”,
“Când, singur cuc, Apolodor”, “ a găurit cu un topor”, “ Peret, ii
marelui vapor!...” se transformă ı̂n “O, ce păcat , o, ce păcat”, “Că n-a fost
fotografiat”, “Acel moment ı̂nălt, ător”, “Când, singur cuc, Apolodor”, ”A
găurit cu un topor”, “Peret, ii marelui vapor!...”.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument poezia (un tablou
de s, iruri de caractere), eventual numărul de versuri (dimensiunea tabloului).
Se va parcurge fiecare vers al poeziei s, i, pentru fiecare vers, se verifică,
caracter cu caracter, dacă două caractere succesive sunt caractere albe:
dacă da, atunci se deplasează restul versului cu un caracter la stânga.
(c) Fiecare vers trebuie să ı̂nceapă cu literă mare de tipar.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument poezia (un tablou
de s, iruri de caractere), eventual numărul de versuri (dimensiunea tabloului).
Se va parcurge fiecare vers al poeziei s, i, pentru fiecare vers, se verifică dacă
primul caracter este literă mică: dacă da, atunci se transformă ı̂n literă
mare (de exemplu, prin scăderea numărului de caractere dintre literele mici
s, i literele mari).
(d) O altă problemă este legată de faptul că uneori ı̂nainte de caracterele ’,’,
’ ?’, ’ !’ sau ’.’ s-a lăsat un spat, iu liber s, i acesta trebuie eliminat sau s-a
uitat să se lase spat, iu după virgulă, punct, semnul exclamării s, i semnul
ı̂ntrebării. De exemplu, “Când , singur cuc,Apolodor” trebuie ı̂nlocuit cu
“Când, singur cuc, Apolodor”.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument poezia (un tablou
de s, iruri de caractere), eventual numărul de versuri (dimensiunea tabloului).
Se va parcurge fiecare vers al poeziei s, i, pentru fiecare vers, se verifică dacă
caracterul curent este unul din caracterele: .,?!, iar dacă da:
Se verifică dacă ı̂naintea lui este spat, iu: dacă da, atunci se deplasează
s, irul rămas cu o pozit, ie la dreapta;
Se verifică dacă după el este spat, iu: dacă nu, atunci se deplasează s, irul
rămas cu o pozit, ie la dreapta s, i se adaugă spat, iul (Atent, ie: dacă este
spat, iu trebuie să deplasăm la dreapta; după ultimul caracter nu trebuie
să adăugăm spat, iu).
(e) Verificat, i tipul de rimă al poeziei: ı̂mperecheată (aabb), ı̂ncrucis, ată (abab),
ı̂mbrăt, is, ată (abba), monorima (aaaa) sau albă, ı̂n restul cazurilor. Spunem
că două cuvinte “rimează” dacă sufixele ı̂ncepând de la ultima vocală sunt
identice, sufixele trebuie să aibă lungimea strict mai mare ca 1.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument poezia (un tablou
de s, iruri de caractere), din poezie luăm ı̂n considerare doar primele patru
versuri (pe baza lor determinăm tipul de rimă).
26
Pentru fiecare vers din cele patru se ret, ine sufixul.
După ce s-au obt, inut sufixele, se verifică tipul de rimă.
11. Determinat, i numărul de cuvinte “magice” dintr-o propozit, ie. Cuvintele propo-
zit, iei sunt separate de spat, ii. Un cuvânt (L1 L2 L3 ...Ln−1 Ln ) este “magic” dacă
satisface următoarea proprietate |Li − Li+1 | = |Ln−i − Ln−i−1 |, pentru oricare
i = 1...n. De exemplu, ı̂n propozit, ia “Miss Arora teaches us malayalam bdwy”
sunt 4 astfel de cuvinte: Arora, us, Malayalam, bdwy.
Indicat, ie: Se defines, te o funct, ie care primes, te ca argument propozit, ia (un s, ir de
caractere), se parcurg literele propozit, iei, iar când se ı̂ntâlnes, te caracterul spat, iu,
se consideră că s-a găsit un cuvânt s, i se verifică proprietatea de cuvânt “magic”.
Tematică
Concepte s, i modalităt, i de reprezentare pentru grafuri neorientate, grafuri orientate,
arbori
Aplicaţii
Probleme
1. Se citeşte un graf neorientat din fişierul muchii.txt ı̂n care avem pe prima linie
numărul n de noduri şi cel de muchii separate prin spaţiu, iar pe fiecare din
liniile următoare avem nodurile unei muchii separate prin spaţiu. Se presupune
că n ≤ 50.
(a) Pentru fiecare nod, afişaţi gradul şi muchiile incidente la acel nod.
(b) Afişaţi numărul de noduri şi matricea de adiacenţă a grafului.
2. Se citesc două grafuri neorientate, unul cu n ≤ 100 vârfuri şi m muchii, iar celălalt
cu k ≤ 100 vârfuri şi r muchii, ambele reprezentate prin lista de muchii.
Să se determine dacă al doilea graf este subgraf al primului graf.
27
nodurile care fac parte din componenta respectivă
dacă are sau nu un ciclu.
28
P[i] = −1 dacă nodul i este descendent stâng; P[i] = 1 dacă nodul i este
descendent drept.
9. Se citeşte un graf conex neorientat cu n ≤ 100 noduri şi m muchii etichetate prin
costui pozitive. Graful se citeşte dintr-un fişier text muchii.txt ı̂n care avem pe
prima linie numărul n de noduri şi numărul m de muchii separate prin spaţiu, iar
pe fiecare din liniile următoare avem nodurile şi costul unei muchii separate prin
spaţiu. Se presupune că ı̂n fişier, muchiile apar ı̂n ordinea crescătoare a costului
lor.
Să se determine un arbore de acoperire cu cost minim al grafului citit, şi să se
afişeze muchiile acestuia.
29
Capitolul 2
30
(a) Scriet, i o funct, ie/procedură (C/C++/Pascal) care construies, te un tablou
ordonat crescător ce cont, ine toate cele n2 elemente ale matricii.
(b) Scriet, i o funct, ie/procedură (C/C++/Pascal) care plasează elementele din
tabloul construit la etapa anterioară, sub forma unei spirale care ı̂ncepe din
colt, ul Stânga-sus al matricii, ı̂n sensul acelor de ceasornic.
Exemplu: Intrare:
1 4 2 5
3 5 7 9
0 8 7 4
1 3 5 2
Rezultat:
(a) 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 7, 7, 8, 9
(b)
Notă:
2. În cazul fiecărei probleme se va descrie ideea de rezolvare ı̂n limbaj natural sau
se vor pune comentarii explicative ı̂n cadrul codului.
31
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 pct.
(a) (definire funct, ie, declarat, ii - 1p, calcul corect număr bit, i - 4p) . . . . . . 5 pct
(b) (definire funct, ie, declarat, ii - 1p, calcul corect cifra binară - 4p) . . . . . .5 pct
(c) (definire funct, ie, declarat, ii - 1p, verificare simetrie - 4p) . . . . . . . . . . . . .5 pct
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 pct.
(a) (descrierea unei metode corecte de construire a subs, irurilor) . . . . . . . 10 pct
(b) (declarat, ii - 1p, citire s, ir - 1p, afis, are subs, iruri - 3p, construire subs, iruri -
10p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 pct.
(a) (definire funct, ie, declarat, ii - 1p, parcurgere matrice - 2p, construire tablou
ordonat - 7p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct
(b) (construire matrice cu elemente plasate corect) . . . . . . . . . . . . . . . . . . . . 20 pct
Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
(declarat, ii - 1p, citire s, ir operatori - 1p, construirea unui s, ir de valori ce satisface
restrict, iile - 15p, afis, are secvent, a de valori si operatori intercalate - 3p)
32
2.2 Edit, ia a IV-a (2018)
1. (30p)
33
ii. Este graful conex?
iii. Care este numărul minim de muchii care ar trebui eliminate pentru
ca graful să devină conex? Dat, i un exemplu de muchii prin a căror
eliminare graful devine neconex.
(a) (5p) Scriet, i o funct, ie/procedură care afis, ează numărul de segmente de dreap-
tă orizontale s, i numărul de segmente de dreaptă verticale.
(b) (5p) S, tiind că lungimea unui segment determinat
p de două puncte având co-
ordonatele (xi , yi ), respectiv (xj , yj ) este (xi − xj )2 + (yi − yj )2 , scriet, i o
funct, ie care primes, te ca parametri coordonatele a două puncte s, i returnează
lungimea segmentului determinat de ele.
(c) (10p) Scriet, i o funct, ie/procedură care transformă matricea A, astfel ı̂ncât
liniile sale să fie ordonate crescător după lungimea segmentului pe care ı̂l
reprezintă.
3. (20p) Pentru un număr natural n definim d(n) ca fiind suma dintre n s, i suma
cifrelor sale. De exemplu, d(75) = 75 + 7 + 5 = 87. Numărul n este considerat
generator pentru d(n) (75 este generator pentru 87). Un număr natural nenul m
este considerat auto-număr dacă nu există niciun număr n < m cu proprietatea
că n este generator pentru m (adică m 6= d(n) pentru orice n < m).
(a) (5p) Scriet, i o funct, ie care primes, te un număr natural n s, i returnează valoa-
rea lui d(n).
(b) (10p) Scriet, i o funct, ie care determină numărul maxim de generatori pe care
ı̂i poate avea un număr cu k cifre (2 ≤ k ≤ 4).
(c) (5p) Scriet, i o funct, ie/procedură care afis, ează toate auto-numerele care au
cel mult k cifre (2 ≤ k ≤ 4).
34
Notă:
2. Pentru fiecare dintre funct, iile/subprogramele scrise se vor specifica toate decla-
rat, iile de variabile globale s, i locale necesare s, i se vor pune comentarii explicative.
NU este necesară scrierea programului principal s, i nici preluarea datelor prin
citire.
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(i. descriere corectă a funct, iei recursive - 3p; ii. funct, ia determină restul
ı̂mpărt, irii ı̂ntregi a lui m la n - 2p)
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; contorizarea numărului de cifre egale cu 1 din reprezentarea ı̂n baza 2 a numărului
- 4p)
1c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului
- 1p; verificare divizibilitate cu 3 (suma tuturor cifrelor este divizibilă cu 3) - 2p;
verificare divizibilitate cu 5 (cifra cea mai put, in semnificativă este 0 sau 5) - 2p)
1d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(ii. pozit, ia elementului aij ı̂n tablou este (i − 2)(i − 1)/2 + j - 5p)
1e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(i. [k/2]
P
i=1 |bi − bk−i+1 | - 2p; ii. declararea corectă a funct, iei, a variabilelor locale
s, i returnarea rezultatului - 1p; calculul corect al coeficientului - 2p)
1f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(i. desen corect al grafului - 1p; ii. da, graful este conex - 1p; iii. trebuie
eliminate minim două muchii - 2p; exemplu corect de muchii eliminate (de exemplu,
(2, 4) s, i (3, 6) - 1p)
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i afis, area rezultatelor - 1p;
contorizarea corectă a segmentelor orizontale (segmentul i este orizontal dacă ai2 = ai4 ,
respectiv vertical dacă ai1 = ai3 ) - 4p)
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; descrierea corectă a calculului lungimii unui segment - 4p)
35
2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei, a variabilelor locale/globale - 1p; implementarea
corectă a algoritmului de sortare folosind funct, ia de la punctul (b) drept criteriu de
sortare - 9p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; calcul sumă cifre - 3p; calcul corect d(n) - 1p)
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i afis, area rezultatelor - 1p;
construirea unui tabel de frecvent, e corespunzător valorilor de tip d(i) calculate pentru
valori ale lui i cuprinse ı̂ntre 1 s, i 10k − 1 - 7p; determinarea valorii maxime din tabelul
de frecvent, e - 2p)
3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i afis, area rezultatelor -
1p; generarea corectă a auto-numerelor (de exemplu, parcurgând tabelul de frecvent, e
construit la punctul anterior) - 4p)
Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
4a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; analiza tuturor subs, irurilor care respectă s, ablonul (de exemplu, pornind de la un
subs, ir de forma “aba” s, i extinzându-l ı̂nspre stânga s, i dreapta cât este posibil) - 6p;
determinarea corectă a parametrului n corespunzător s, ablonului de lungime maximă
- 3p)
4b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea unei variabile care stochează setul de s, iruri de caractere - 2p;
declararea corectă a funct, iei s, i a variabilelor locale - 1p; determinarea pentru fiecare
s, ir din set a lungimii maxime a unui subs, ir care respectă s, ablonul (folosind funct, ia de
la punctul (a)) - 3p; determinarea valorii minime dintre lungimile maxime determinate
- 2p; afis, area corectă a s, ablonului comun - 2p)
36
2.3 Edit, ia a V-a (2019)
1. (50p)
37
i. Care dintre următoarele afirmat, ii este corectă?
2
A. V (m) = Cm ;
B. V (m) = m!;
C. V (1) = 1, V (2) = 2, V (m) + V (m − 1) + V (m − 2), pentru m > 2;
D. V (1) = 1, V (m) = 2V (m − 1), pentru m > 1.
ii. Argumentat, i alegerea făcută la punctul i.
(f) (15p) Se consideră un set de n puncte ı̂n plan date prin coordonatele lor car-
teziene (numere ı̂ntregi) stocate ı̂n două tablouri x s, i y s, i se pune problema
determinării numărului de linii drepte care trec prin originea sistemului de
axe de coordonate s, i cont, in cele n puncte.
i. Scriet, i un subprogram (funct, ie/procedură) care ordonează tablourile x
s, i y crescător după valoarea y/x (se presupune că toate valorile x sunt
nenule). După ordonare, punctele vor fi ı̂n ordinea crescătoare a pantei
dreptei determinată de origine s, i punctul respectiv.
ii. Scriet, i o funct, ie care primes, te tablourile x s, i y ordonate s, i returnează
numărul de linii distincte care trec prin origine s, i cont, in toate cele n
puncte.
2. (25p) Primarul oras, ului WWW dores, te să instaleze o cameră de luat vederi ı̂n oras, .
Se consideră că oras, ul are formă dreptunghiulară, cu străzi paralele s, i perpendi-
culare situate la distant, e egale. Dreptunghiul corespunzător oras, ului s, i străzile
aferente sunt modelate printr-o grilă cu dimensiunea M × N (2 ≤ M, N ≤ 1000),
ı̂n nodurile căreia sunt plasate clădirile (fiecare clădire este modelată printr-un
“bet, is, or” de grosime neglijabilă a cărui ı̂nălt, ime este egală cu ı̂nălt, imea clădirii
din acel punct). Camera de luat vederi urmează să fie instalată la nivelul solului
ı̂n colt, ul stânga-sus (NORD-VEST) al oras, ului (punctul de coordonate (0, 0),
unde nu se găses, te nicio clădire) s, i se presupune că se poate roti complet ı̂n orice
plan relativ la pozit, ia ı̂n care a fost instalată.
O cameră de luat vederi poate supraveghea clădiri doar dacă le poate identifica
part, ial sau integral. De exemplu, considerând un oras, de dimensiune 3×3, ı̂n care
ı̂nălt, imile clădirilor sunt cele marcate ı̂n Figura 2.1, camera de luat vederi situată
la nivelul solului va putea identifica pe direct, ia SUD ambele clădiri (de ı̂nălt, ime
1 s, i 3), pe direct, ia EST va putea identifica doar clădirea de ı̂nălt, ime 3, iar pe
direct, ia SUD-EST va vedea doar clădirea de ı̂nălt, ime 2 situată pe diagonală.
Un alt exemplu de clădiri vizibile pe o direct, ie dată este ilustrat ı̂n Figura 2.2
(clădirile marcate cu linie continuă sunt vizibile, cela marcate cu linie ı̂ntreruptă
sunt invizibile).
38
Figura 2.1 Figura 2.2
(c) (5p) Folosind funct, ia viewSouthEast s, i presupunând că este definită funct, ia
viewDir (care are ca parametri matricea O, valorile k1 , k2 s, i returnează
numărul de clădiri vizibile pe direct, ia definită de (k1 , k2 )), descriet, i funct, ia
viewAll care returnează numărul total de clădiri care pot fi supravegheate
atunci când camera este instalată ı̂n (0, 0) la nivelul solului.
(a) (3p) Să se argumenteze că pentru orice permutare P, are loc SU S(P ) ≥
LDS(P ).
(b) (10p) Scriet, i un subprogram care construies, te o descompunere a unei per-
mutări P ı̂ntr-un număr minim de subs, iruri crescătoare.
(c) (2) Demonstrat, i, folosind rezultatul de la punctul (a), că subprogramul
descris la punctul (b) realizează descompunerea lui P ı̂ntr-un număr minim
de subs, iruri crescătoare.
Notă:
2. Pentru fiecare dintre subprogramele (funct, ii, proceduri) scrise se vor specifica
toate declarat, iile de variabile globale s, i locale necesare s, i se vor pune comentarii
explicative. NU este necesară scrierea programului principal s, i nici preluarea
datelor prin citire.
39
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(a)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; algoritm corect de extragere a cifrelor - 2p; algoritm corect de
construire a tabloului c care indică corect cifrele comune - 2p)
1(a)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; algoritm corect de extragere a cifrelor - 2p; algoritm corect de
parcurgere a elementelor tabloului c - 2p; algoritm corect de construire a numărului z
- 2p)
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(b)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(lungimea laturii este d = cmmd(m, n); numărul minim de tăieturi este m/d−1
(pe verticală), respectiv n/d − 1 (pe orizontală))
1(b)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; algoritm corect de calcul a celui mai mare divizor comun - 3p;
algoritm corect de calcul a numărului de tăieturi s, i afis, area rezultatelor - 1p)
1c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
1(c)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
A. 12; B. 12; C. a ∗ b
1(c)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(definire corectă a funct, iei (inclusiv lista de parametri s, i returnare rezultat) -
1p; implementare corectă a funct, iei recursive - 2p)
1d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; parcurgere corectă a matricii s, i determinarea numărului maxim
de prieteni (suma maximă pe linie sau coloană) - 2p; determinarea corectă s, i afis, area
indicilor de linie (coloană) pentru care suma este maximă - 2p)
1e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
1(e)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
(Răspuns corect: C.)
1(e)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(Dacă m = 1 atunci este o singură posibilitate (o piesă de forma 2 × 1).
Dacă ultima piesă completată este de forma 2 × 1 atunci sunt V (m − 1) variante de
40
a completa primele m − 1 coloane. Dacă ultima piesă completată este de forma 1 × 2
atunci penultima trebuie să fie de aceeas, i formă s, i sunt V (m−2) variante de a completa
primele m − 2 coloane. Deci dacă m > 2 are loc V (m) = V (m − 1) + V (m − 2).)
1f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct.
1(f)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; implementarea corectă a unui algoritm de sortare simultană a
tablourilor x s, i y (cu proprietatea că y[i]/x[i] ≤ y[i + 1]/x[i + 1] - 6p)
1(f)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri s, i returnarea rezultatului) - 1p; parcurgerea tablourilor sortate s, i con-
torizarea corectă a numărului de linii (de exemplu, contorizând numărul de elemente
(x[i], y[i]) cu proprietatea că y[i] ∗ x[i + 1] 6= y[i + 1] ∗ x[i] s, i adăugând 1) - 7p)
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; algoritm corect de contorizare a clădirilor - 8p; implementarea
corectă a parcurgerii clădirilor pe direct, iile SUD, EST, SUD-EST - 6p)
Idee de contorizare a numărului de clădiri vizibile pe o direct, ie dată (folosind
proprietăt, i referitoare la asemănarea triungiurilor):
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(Regula de calcul a pozit, iei clădirii i pe direct, ia definită de (0, 0) s, i (k1 , k2 )
este: (k1 ∗ i, k2 ∗ i) - 5p)
2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; algoritm corect de contorizare s, i apeluri corecte ale funct, iilor
viewSouthEast, viewDir - 4p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 pct.
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(Idee: Fie Q un subs, ir descrescător al lui P de lungime LDS(P ). În orice
descompunere a lui P ı̂n subs, iruri crescătoare, termenii din Q trebuie să apară ı̂n
subs, iruri diferite. Prin urmare, SU S(P ) ≥ LDS(P ).)
41
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declarat, ii variabile locale/globale, definire corectă subprogram (inclusiv lista
de parametri) - 1p; parcurgere corectă a elementelor permutării - 1p; algoritm corect
de construire a subs, irurilor - 6p; completare corectă a subs, irurilor ı̂n structura de date
pentru care s-a optat (matrice, liste etc.) - 2p)
Idee: se poate aplica o strategie de tip “greedy”: se parcurg elementele per-
mutării s, i se adaugă fiecare la primul subs, ir compatibil (ı̂n care ultimul element adăugat
este mai mic decât elementul curent), init, iind un nou subs, ir dacă adăugarea la unul
existent nu este posibilă.
3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
(Fie m numărul de subs, iruri construite folosind algoritmul de la punctul (b).
Vom demonstra că m ≤ LDS(P ) (corectitudinea rezultând din proprietatea de la
punctul (a) s, i această observat, ie). Pentru aceasta e suficient să creăm un subs, ir des-
crescător care cont, ine un element din fiecare subs, ir creat folosind algoritmul “greedy”
de la punctul (b). Să considerăm ultimul element xm adăugat ı̂n ultimul subs, ir Sm .
xm a fost adăugat ı̂n Sm (s, i nu ı̂n Sm−1 pentru că a existat un element xm−1 > xm ı̂n
Sm−1 la momentul ı̂n care l-am adăugat pe xm (xm−1 “nu a permis” adăugarea lui xm
ı̂n subs, irul Sm−1 ). Pe de altă parte, xm−1 este ı̂n Sm−1 pentru că există xm−2 ı̂n Sm−2 ,
cu xm−2 > xm−1 care “nu a permis” ca xm−1 să fie adăugat ı̂n subs, irul Sm−2 s, .a.m.d.
În acest fel, am construit un s, ir descrescător x1 > x2 > · · · > xm , xi ∈ Si .)
42
2.4 Edit, ia a VI-a (2021)
1. Se consideră funct, ia T descrisă mai jos care primes, te un parametru ı̂ntreg s, i
returnează o valoare ı̂ntreagă (operatorii DIV s, i MOD specifică câtul, respectiv
restul ı̂mpărt, irii ı̂ntregi).
funct, ie T(n)
dacă n=1 atunci returnează 1 sf dacă
S←0
m ← n DIV 2
dacă n M OD 2 = 0 atunci
m←m−1
sf dacă
i←1
at timp i <= m execută
c^
S ← S + T (i) ∗ T (n − i)
i←i+1
sf c^
at timp
dacă n M OD 2 = 0 atunci
x ← T (n/2)
returnează 2 ∗ S + x ∗ x
altfel
returnează 2 ∗ S
sf dacă
sf funct, ie
Ce valoare va returna funct, ia dacă este apelată pentru n = 5?
(a) 61
(b) 23
(c) 12
(d) 14 Răspuns corect
(e) 15
(a) 20
43
(b) 21
(c) 79
(d) 80 Răspuns corect
(e) 81
(f) 82
Indicat, ie: Se poate construi arborele de parcurgere a spat, iului solut, iilor pornind
de la nodul cu suma totală s, i ramificând prima dată după pitici mari (pot fi 2, 1
sau 0), dupa aceea pentru pitici medii (de restul banilor se cumpără pitici mici
ca sa nu rămână rest mai mare ca 9):
2 mari → 1 sau 0 medii (2 variante)
1 mare → 3, 2, 1, 0 medii (4 variante)
0 mari → 5, 4, 3, 2, 1, 0 medii (6 variante)
În total 12 variante.
4. Câte zerouri are la sfârs, it 2021! (factorialul numărului 2021)?
(a) 202
(b) 420
(c) 500
(d) 501
(e) 503 Răspuns corect
Indicat, ie: Se vor număra numerele până la 2021 care sunt multipli de 5. Fiecare
multiplu de 5 va adăuga un 0. Fiecare multiplu de 52 va adăuga câte un 0 ı̂n plus
pentru că a fost deja numărat ca s, i multiplu de 5. Se va continua cu multiplii
lui 53 , apoi 54 .
2021 / 5 = 404
2021 / 25 = 80
2021 / 125 = 16
2021 / 625 = 3
total = 503
44
5. Se consideră secvent, a de instruct, iuni care transformă un tablou x ce cont, ine n
valori reale:
pentru i ← 1, n − 1 execută
dacă x[i] > x[i + 1] atunci
aux ← x[i]
x[i] ← x[i + 1]
x[i + 1] ← aux
sf dacă
sf pentru
Care dintre următoarele proprietăt, i este satisfacută de către elementele tabloului
x după execut, ia secvent, ei de mai sus?
45
(a) Răspuns corect
j←i
at timp j <= n execută
c^
s[j − k + 1] ← s[j]
j ←j+1
sf c^at timp
(b) Răspuns corect
j←i
h←i−k+1
at timp j <= n execută
c^
s[h] ← s[j]
j ←j+1
h←h+1
sf cat timp
(c) j ← i
at timp j <= n execută
c^
s[j − k] ← s[j]
j ←j+1
sf c^
at timp
(d) Niciuna din variantele propuse nu este corectă
46
(e) Niciuna din variante nu este corectă.
9. Ce valoare va avea variabila k ı̂n urma execut, iei secvent, ei de prelucrări pentru
un număr natural nenul n (operatorul DIV produce câtul ı̂mpărt, irii ı̂ntregi, iar
[x] reprezintă partea ı̂ntreaga a numărului x)?
k←0
at timp n > 0 execută
c^
n ← n/2
k ←k+1
sf c^
at timp
(a) n/2
(b) [log2 n]
(c) n
(d) [log2 n] + 1 Răspuns corect
47
10. Se consideră matricea
1 1
A=
1 0
Care este valoarea elementului de pe prima linie, prima coloană (elementul din
stânga sus) din matricea A100 = A ∗ A ∗ . . . ∗ A (de 100 de ori)
(a) 100
(b) 1
(c) elementul cu indicele 100 din s, irul dat prin relat, ia de recurentă: f0 = 1, f1
= 1, fn = fn−1 + fn−2 Răspuns corect
(d) elementul cu indicele 99 din s, irul dat prin relat, ia de recurentă: f0 = 1, f1
= 1, fn = fn−1 + fn−2
(e) 2100
(a) 25
(b) 24 Răspuns corect
(c) 28
(d) 15
48
(a) 0 2 7 12 17 22 27
(b) 27 22 17 12 7 2 0 2 7 12 17 22 27 Răspuns corect
(c) 27 22 17 12 7 2 -2 2 7 12 17 22 27
(d) 25 20 15 10 5 0 5 10 15 20 25
(e) 27 22 17 12 7 2 0
14. De câte ori se execută instruct, iunea x ← x + 1 ı̂n secvent, a de mai jos?
x←0
pentru i ← 2, N execută
pentru j ← 1, i − 1 execută
x←x+1
sf pentru
sf pentru
(a) N (N − 1)
(b) N (N − 1)/2 Răspuns corect
49
(c) N (N + 1)/2
(d) (N − 1)(i − 1)
Problema 1
Se consideră un dreptunghi de dimensiune 2 × n (două linii s, i n coloane) s, i se dores, te
acoperirea dreptunghiului cu piese de domino de forma 2 × 1 sau 1 × 2.
Prezentat, i pe scurt ideea de rezolvare s, i descriet, i solut, ia ı̂n pseudocod sau ı̂ntr-un
limbaj de programare la alegere (C/C++, Pascal, Python).
50
Idee de rezolvare
1. Considerând dreptunghiul de dimensiune n se poate ı̂ncepe acoperirea fie cu:
1 - o piesă plasată vertical, caz ı̂n care problema se reduce la o problemă de
dimensiune n − 1
2 - două piese plasate orizontal, caz ı̂n care problema se reduce la o problemă de
dimensiune n − 2
Prin urmare formula de calcul a numărului de variante posibile este:
C(1) = 1
C(2) = 2 (se pot pune orizontal sau vertical)
C(n) = C(n-1) + C(n-2) (de tip Fibonacci)
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
(a) Descrierea ideii de rezolvare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
Implementarea funct, iei:
Declarat, ii de variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
Implementare corectă C(1) = 1, C(2) = 2, C(n) = C(n − 1) + C(n − 2) 2 pct.
Definirea corectă a funct, iei s, i returnarea rezultatului . . . . . . . . . . . . . . . . . . 1 pct.
(b) Descrierea ideii de rezolvare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
Declarat, ii, definire s, i implementare corectă a subprogramului . . . . . . . . . . . . . .1 pct.
Problema 2
Se consideră două secvent, e de câte n valori naturale a1 , a2 , . . ., an respectiv b1 , b2 , . . .,
bn . Se pune problema determinării unei permutări de ordin n, p = (p(1), p(2), . . . , p(n))
astfel ı̂ncât suma |a1 −bp(1) |+|a2 −bp(2) |+. . .+|an −bp(n) | să fie cât mai mare. Descriet, i
un algoritm care permite obt, inerea permutării s, i sumei corespunzătoare.
De exemplu, pentru a = (5, 9, 12, 4) s, i b = (7, 2, 15, 5) o permutare care satisface
cerint, a este p = (1, 4, 2, 3), suma fiind |5 − 7| + |9 − 5| + |12 − 2| + |4 − 15| = 27.
Prezentat, i pe scurt ideea de rezolvare, justificat, i că ideea este corectă s, i descriet, i
solut, ia ı̂n pseudocod sau ı̂ntr-un limbaj de programare la alegere (C/C++, Pascal,
Python).
51
Idei de rezolvare
Varianta 1: Pentru construirea permutării se parcurg elementele lui a ı̂n ordine des-
crescătoare s, i a lui b ı̂n ordine crescătoare. La primul pas se va completa ı̂n permutare
p[pozmaxa ] = pozminb s, i se continua procesul.
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
Idee rezolvare - specificare modului de obt, ine al permutării . . . . . . . . . . . . . . . . . . . 2 pct.
Argumentarea corectitudinii algoritmului propus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 pct.
Declarat, ii de variabile care descriu structurile utilizate . . . . . . . . . . . . . . . . . . . . . . . .1 pct.
Construirea corectă a permutarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
Calculul corect al sumei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
Problema 3
Pentru un grup de n persoane se cunosc perechile de persoane care intră frecvent ı̂n
contact (fac parte din aceeas, i familie sau lucrează ı̂mpreună). În contextul răspândirii
unei epidemii se consideră că toate persoanele care au intrat ı̂n contact cu o persoană
infectată devin infectate. Cunoscând care este pacientul 0 determinat, i numărul de
persoane care au fost infectate.
Exemplu: n = 7 s, i perechile de persoane care intră ı̂n contact sunt: (P1 , P2 ),
(P1 , P4 ), (P1 , P7 ), (P3 , P6 ) s, i (P5 , P6 ). În ipoteza că pacientul zero este P2 modul de
răspândire al infect, ie este: la etapa 1 se infectează P1 , la etapa 2 se infectează P4
s, i P7 s, i procesul de răspândire a infect, iei se opres, te deoarece nu mai există persoane
neinfectate care au intrat ı̂n contact cu o persoană infectată, numărul de persoane
infectate fiind 4.
Prezentat, i pe scurt ideea de rezolvare s, i descriet, i solut, ia ı̂n pseudocod sau ı̂ntr-un
limbaj de programare la alegere (C/C++, Pascal, Python).
Idei de rezolvare
Varianta 1: Relat, iile dintre persoane se pot reprezenta sub forma unui graf, iar
numărul de noduri (determinat prin parcurgere ı̂n adancime sau ı̂n lăt, ime) din sub-
graful care cont, ine persoana zero reprezintă solut, ia problemei.
52
Varianta 2: Pentru a reprezenta contactele se poate folosi o matrice (m), mi,j = 1
dacă persoana i a intrat ı̂n contact cu persoana j. Pentru a determina numărul de
persoane infectate se poate folosi un vector (v) care stochează informat, ia dacă persoana
este infectată sau nu. Se pornes, te de la persoana zero (p0 ) s, i se caută persoanele cu
care este ı̂n contact mp0 ,k = 1, k = 1, n. În prima etapă se marchează ca infectate toate
persoanele aflate ı̂n contact direct cu pacientul p0 . La etapa următoare se marchează
ca infectate toate persoanele neinfectate care sunt ı̂n contact direct cu cele infectate la
etapa anterioară. Procesul va continua până când nu mai apar persoane nou infectate.
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
Idee rezolvare - descrierea procesului de răspândire a infect, iei . . . . . . . . . . . . . . . . . 2 pct.
Descrierea structurilor de date folosite s, i declarat, ii . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
Implementarea algoritmului de răspândire a infect, iei . . . . . . . . . . . . . . . . . . . . . . . . . . 4 pct.
Determinarea corectă a numărului de persoane infectate . . . . . . . . . . . . . . . . . . . . . . 1 pct.
53
Capitolul 3
(b) (5p) Se consideră un pătrat de latură L al cărui vârf din stânga jos are coor-
donatele (x0 , y0 ). Se pune problema verificării dacă un punct de coordonate
(x, y) se află sau nu ı̂n interiorul pătratului. Scriet, i o funct, ie C/C++/Pascal
care primes, te ca parametri de intrare valorile reale L, x0 , y0 , x, y s, i retur-
nează 1 dacă punctul se află ı̂n interiorul pătratului s, i 0 ı̂n caz contrar.
(c) (5p) Scriet, i o funct, ie C/C++/Pascal care primes, te 6 parametri (a, b, c, x, y,
z) care reprezintă lungimile laturilor a două triunghiuri (a, b, c reprezintă
lungimile laturilor primului triunghi, iar x, y, z lungimile laturilor celui de
al doilea triunghi) s, i returnează 1 dacă triunghiurile sunt asemenea s, i 0 ı̂n
caz contrar. Lungimile laturilor fiecărui triunghi sunt numere naturale s, i
sunt enumerate ı̂ntr-o ordine arbitrară.
(d) (5p) Se consideră o tablă caroiată ce cont, ine N × N (N > 3) pătrăt, ele din
care se elimină două pătrăt, ele aflate ı̂n extremităt, ile uneia dintre diagonale.
Se dores, te acoperirea tablei cu piese de domino de dimensiune 2 × 1 (care
pot fi plasate pe orizontală sau verticală).
Când este posibilă acoperirea exactă a tablei cu piese?
i. când N este impar;
ii. când N este par;
iii. pentru nicio valoare a lui N ;
iv. pentru orice valoare a lui N.
54
2. Adresele de e-mail de la UVT au următoarea structură: prenume.nume@e-uvt.ro
(numele s, i prenumele cont, in doar litere mici).
3. Doi prieteni, Geo s, i Leo, joacă următorul joc: pe o foaie este scrisă o listă de
M numere naturale nenule mai mici decât 10000. La ı̂nceputul jocului, Geo s, i
Leo aleg fiecare câte trei numere prime impare distincte, mai mici decât 100. La
fiecare rundă se trece la următorul număr din listă, notat cu N, s, i fiecare dintre
cei doi jucători ı̂s, i recalculează scorul după următoarea regulă: se adaugă câte
1 punct pentru fiecare factor din descompunerea ı̂n produs de factori primi a
numărului N care se regăses, te printre cele 3 numere prime pe care le-a ales la
ı̂nceput, se scade câte un punct pentru fiecare dintre numerele sale prime care
nu apare ı̂n descompunerea ı̂n produs de factori primi a numărului N. Câs, tigă
jucătorul care are punctajul cel mai mic la terminarea tuturor numerelor de pe
foaie.
Exemplu: dacă numărul N este 150, iar Geo a ales la ı̂nceput numerele prime
3, 5 s, i 13, va primi un total de 2 puncte: 1 punct pentru 3, 2 puncte pentru 5 s, i
−1 punct pentru 13.
Scriet, i următoarele funct, ii (C/C++/Pascal) utile pentru calculul scorului ununi
jucător:
(a) (5p) estePrim(x) - o funct, ie care returnează 1 dacă x este prim s, i impar,
respectiv 0 ı̂n caz contrar.
(b) (5p) esteFactorPrim(N, x) - o funct, ie care returnează 1 dacă x apare ı̂n
descompunerea ı̂n produs de factori primi a lui N, respectiv 0 ı̂n caz contrar;
se va utiliza funct, ia estePrim descrisă la punctul (a).
(c) (5p) puncte(N, x) - o funct, ie care returnează numărul de puncte primite
pentru perechea (N, x); se va utiliza funct, ia esteFactorPrim descrisă la
punctul (b).
(d) (5p) punctaj(listaNumere, nr1, nr2, nr3) - o funct, ie care returnează
scorul corespunzător listei de numere pentru jucătorul care a ales nume-
rele prime init, iale nr1, nr2 s, i nr3, determinat folosind funct, ii dintre cele
descrise anterior.
55
(a) (10p) Scriet, i o funct, ie (procedură) C/C++/Pascal care, pornind de la ma-
tricea A (variabilă globală), construies, te histograma imaginii (un tablou
unidimensional H cu 256 de elemente ı̂n care elementul de pe pozit, ia i
cont, ine numărul de elemente din matricea A care au valoarea i).
(b) (10p) Scriet, i o funct, ie C/C++/Pascal care primes, te ca parametru tabloul
cu histograma imaginii determinată la punctul (a) s, i returnează nivelul
mediu de gri, g, (calculat ca medie ponderată a elementelor din matricea
A : g = (H[0]×0+H[1]×1+· · ·+H[255]×255)/(H[0]+H[1]+· · ·+H[255])).
(c) (10p) Scriet, i o funct, ie (procedură) C/C++/Pascal care primes, te ca para-
metri matricea A s, i nivelul mediu de gri g, determinat la punctul (b), s, i
construies, te o matrice B de aceleas, i dimensiuni cu A cu proprietatea că
elementul de pe linia i s, i coloana j este egal cu 1 dacă elementul cores-
punzător din matricea A este mai mare sau egal cu g, respectiv este egal cu
0 dacă elementul corespunzător din A este mai mic decât g.
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; calculul corect al
valorii m - 4p)
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; specificarea co-
rectă a condit, iei de punct interior (x ∈ (x0 , x0 + L) s, i y ∈ (y0 , y0 + L)) - 4p)
1c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; verificarea corectă
a condit, iei de asemănare a triunghiurilor (se transformă variabilele astfel ı̂ncât a ≤
b ≤ c s, i x ≤ y ≤ z după care se verifică condit, ia de proport, ionalitate a lungimilor
laturilor: a/x = b/y = c/z sau a × y = b × x s, i b × z = c × y) - 4p)
1d (iii) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; verificarea corectă
a structurii de adresă UVT (subs, irurile ce corespund prenumelui s, i numelui sunt nevide
s, i cont, in doar litere mici - 2p, există un singur punct ı̂nainte de simbolul @ - 2p, iar
subs, irul de după simbolul @ coincide cu “e-uvt.ro” - 5p))
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei (procedurii)- 1p; afis, area prenumelui - 4p s, i
numelui - 4p ı̂ncepând cu majuscule - 1p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20 pct.
56
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; verificarea corectă
a proprietăt, ii de număr impar - 1p s, i de număr prim - 3p)
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; verificarea corectă
a faptului că x este factor prim al lui N - 4p)
3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; calculul corect al
numărului de puncte - 4p)
3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; calculul corect al
scorului: parcurgerea listei cu numere - 2p, apelul corect al funct, iei punctaj - 2p)
Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 pct.
4a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a matricii A - 1p; declararea corectă a tabloului H - 1p;
declararea corectă a funct, iei (procedurii) - 1p; completarea corectă a tabloului H - 7p)
4b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei s, i returnarea rezultatului - 1p; calculul corect al
mediei ponderate - 9p)
4c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a matricii B - 1p; declararea corectă a funct, iei (procedurii)
- 1p; construirea corectă a matricii B - 8p)
57
3.2 Sesiunea Iulie 2017
1. (10p) O matrice pătratică se consideră matrice de tip X dacă toate elementele
sale sunt nule cu except, ia celor care se află pe una dintre cele două diagonale.
58
ii. returnează numărul N de subsecvent, e identificate
Exemplu: Pentru secvent, a (5, 1, 3, 2, 4, 7, 6, 4, 10, 8, 3) tabloul L va con-
t, ine valorile (3, 2, 1, 4, 1), iar funct, ia va returna 5.
(b) (10p) Scriet, i un subprogram C/C++/Pascal care primes, te ca parametri
indicii, i1 s, i i2 (se presupune că i1 ≤ i2 , a două elemente din S s, i ordonează
crescător subtabloul din tabloul S (considerat variabilă globală) determinat
de cei doi indici.
Exemplu: În cazul ı̂n care indicii pornesc de la 0, pentru secvent, a (5, 1, 3, 2,
4, 7, 6, 4, 10, 8, 3) s, i i1 = 6, i2 = 9, după ordonare, variabila S va cont, ine
(5, 1, 3, 2, 4, 7, 4, 6, 8, 10, 3).
(c) (10p) Folosind rezultatele obt, inute apelând funct, ia de la punctul (a) s, i
apelând subprogramul de la punctul (b) să se transforme tabloul S ast-
fel ı̂ncât toate subsecvent, ele de numere de aceeas, i paritate să fie ordo-
nate crescător. Secvent, a (5, 1, 3, 2, 4, 7, 6, 4, 10, 8, 3) se va transforma ı̂n
(1, 3, 5, 2, 4, 7, 4, 6, 8, 10, 3).
(d) (5p) Ana s, i Maria joacă următorul joc: fiind dată o secvent, ă de numere
naturale fiecare jucător trebuie să elimine subsecvet, a de numere de aceeas, i
paritate de la ı̂nceputul secvent, ei curente. Pentru secvent, a (5, 1, 3, 2, 4,
7, 6, 4, 10, 8, 3), după mutarea primului jucător, secvent, a devine (2, 4, 7, 6, 4,
10, 8, 3), după mutarea celui de al doilea, devine (7, 6, 4, 10, 8, 3) etc. Ju-
cătorul care elimină ultima subsecvent, ă pierde jocul. Ambele jucătoare au
acces la ı̂ntreaga secvent, ă. Ana are dreptul să decidă dacă vrea să ı̂nceapă
jocul sau dacă o lasă pe Maria să ı̂nceapă. Ce informat, ii despre secvent, a
sunt suficiente pentru Ana pentru a putea lua decizia care garantează că va
câs, tiga? Descriet, i, ı̂n limbaj natural, regula de decizie corespunzătoare.
59
(d) (15p) Scriet, i un subprogram C/C++/Pascal care foloses, te funct, iile definite
la (a) s, i (c) s, i care verifică dacă tabloul stocat ı̂n variabila globală S cores-
punde unui careu Sudoku completat corect. Subprogramul va afis, a “Careu
corect” dacă sunt satisfăcute proprietăt, ile, respectiv “Careu incorect” dacă
nu sunt satisfăcute.
(e) (3p) Presupunând că ı̂ntr-un subtablou 3 × 3 sunt completate k elemente
(1 < k < 9) cu valori specificate, care este numărul de subtablouri distincte
(care satisfac condit, ia de Sudoku) ce pot fi obt, inute prin completarea celor
9 − k elemente? Aleget, i răspunsul corect dintre:
i. Ak9 ;
ii. A9−k
9 ;
iii. C9k ;
iv. C99−k ;
v. k!;
vi. (9 − k)!.
Exemplu de careu completat corect:
6 8 2 1 9 4 3 5 7
7 3 1 5 6 8 9 2 4
4 9 5 7 2 3 8 6 1
8 2 7 9 3 5 1 4 6
5 1 9 6 4 7 2 8 3
3 6 4 2 8 1 5 7 9
9 5 6 4 1 2 7 3 8
2 4 8 3 7 9 6 1 5
1 7 3 8 5 6 4 9 2
Sursa:
http://www.rasfoiesc.com/familie/copii/Ghid-Sudoku-Regulile-jocului69.php
60
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(Condit, ia ((i = j sau i + j = n + 1) s, i Aij = 0) sau (i 6= j s, i i + j 6= n +
1 s, i Aij 6= 0))
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului
- 1p; descrierea corectă a parcurgerii matricii - 2p; specificarea corectă a condit, iei s, i
completarea variabilei corect - 1p)
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
Răspuns corect: 6
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
Răspuns corect: ii.
2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p;implementarea corectă a relat, iei de recurent, ă - 4p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 pct.
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei s, i a variabilelor locale - 2p; completarea corectă
a tabloului L - 6p; determinarea s, i returnarea numărului de subsecvent, e - 2p)
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a subprogramului s, i a variabilelor locale - 1p; implemen-
tarea corectă a algoritmului de sortare - 9p)
3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea variabilelor utilizate - 1p; parcurgerea tabloului S - 3p; stabilirea
indicilor corespunzători s, i apelul corect a subprogramului de la punctul (b) - 6p)
3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
Răspuns: este suficient să se cunoască numărul de subsecvent, e de valori cu
aceeas, i paritate (valoarea N ); regula de decizie: “dacă N este par atunci Ana ı̂ncepe
jocul, altfel o lasă pe Maria să ı̂nceapă”.
Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 pct.
4a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Variantă de rezolvare: se construies, te un tabel de frecvent, e corespunzător
naturale cuprinse ı̂ntre 1 s, i 9 s, i se verifică dacă toate elementele tabloului de frecvent, e
sunt egale cu 1.
61
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; verificarea condit, iei că elementele au valori distincte - 9p)
4b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
(declararea corectă a tabloului bidimensional S - 2p)
4c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
Variantă de rezolvare: se construies, te un tablou unidimensional cont, inând
elementele subtabloului s, i se apelează funct, ia de la punctul (a)
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului
- 1p; parcurgerea corectă a elementelor subtabloului - 2p; verificarea condit, iei că ele-
mentele au valori distincte - 2p)
4d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct.
(declararea corectă a subprogramului s, i a variabilelor locale - 1p; verifica-
rea proprietăt, ii la nivel de linii - 3p; verificarea proprietăt, ii la nivel de coloane - 3p;
verificarea proprietăt, ii la nivel de subtablouri - 8p)
4e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
Răspuns: vi. (9 − k)!
62
3.3 Sesiunea Iulie 2018
1. (40p)
(a) (5p) Se consideră suma S = 1 − 1/3 + 1/5 − 1/7 + 1/9 − . . . (primul termen
este 1, al doilea termen este −1/3 etc.).
i. Care este expresia corespunzătoare celui de al k−lea termen?
A. 1/(2k − 1);
B. 1/(2k + 1);
C. (−1)k /(2k − 1);
D. (−1)k+1 /(2k − 1);
E. (−1)k+1 /(2k + 1).
ii. Scriet, i o funct, ie ı̂n C/C++/Pascal care primes, te ca parametru un
număr natural n ≥ 2 s, i returnează suma primilor n termeni din S.
(b) (5p) Un număr natural este considerat tip “dublu-unu” dacă reprezentarea
sa ı̂n baza 2 cont, ine exact o pereche de cifre consecutive egale cu 1 (numerele
3 = (11)2 , 6 = (110)2 sunt de tip “dublu-unu”, dar numerele 5 = (101)2 s, i
7 = (111)2 nu sunt de acest tip).
i. Câte numere de tip “dublu-unu” sunt ı̂n intervalul (0, 2d )?
ii. Care dintre următoarele afirmat, ii este adevărată pentru orice număr n
de tip “dublu-unu” din (0, 2d ) :
A. există 1 ≤ k ≤ d astfel ı̂ncât n = 2k − 2k−1 ;
B. există 1 ≤ k < d astfel ı̂ncât n = 2k + 2k−1 ;
C. există 0 < k < d astfel ı̂ncât n = 2k+1 + 2k−1 ;
D. există 1 ≤ k < d astfel ı̂ncât n = 2k + 1.
(c) (10p) Se consideră un serviciu web la care utilizatorii se conectează/deco-
nectează s, i se pune problema determinării numărului maxim de utilizatori
conectat, i simultan pornind de la o secvent, ă de semnale de forma: 1 (s-a
conectat un utilizator), 0 (s-a deconectat un utilizator). De exemplu, pen-
tru secvent, a 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0 numărul maxim de utilizatori
conectat, i simultan este 5. Scriet, i o funct, ie C/C++/Pascal care primes, te
un tablou de semnale precum s, i numărul acestora s, i returnează numărul
maxim de utilizatori conectat, i simultan.
(d) (10p) Pentru un număr natural nenul n se pune problema determinării
numărului de zerouri finale (de exemplu, 304500 cont, ine două zerouri finale,
30245 cont, ine 0 zerouri finale).
i. Scriet, i o funct, ie C/C++/Pascal (nerecursivă) care primes, te ca para-
metru numărul n s, i returnează numărul de zerouri finale.
ii. Scriet, i o funct, ie C/C++/Pascal recursivă care efectuează aceeas, i pre-
lucrare.
(e) (10p) Se consideră că un text a fost tehnoredactat folosind o tastatură
defectă care “multiplică” simbolurile tastate s, i se pune problema “curăt, irii”
acestui text prin eliminarea caracterelor ı̂n exces (se presupune că textul
cont, ine doar cuvinte ı̂n care nu intervin simboluri consecutive identice).
63
De exemplu, textul “Acccceessttta eesttte uuun exxeeemmpplluu” trebuie
transformat ı̂n “Acesta este un exemplu”. Considerând că textul este stocat
ı̂ntr-un tablou cu elemente de tip caracter scriet, i:
i. o funct, ie/procedură care construies, te un nou tablou de caractere care
cont, ine textul curăt, at (pentru exemplul de mai sus noul tablou va avea
22 de caractere s, i va cont, ine “Acesta este un exemplu”);
ii. o funct, ie/procedură care transformă tabloul init, ial astfel ı̂ncât pe pri-
mele pozit, ii să fie textul curat (ı̂n exemplul de mai sus noul cont, inut al
tabloului este “Acesta este un exempluuuun exxeeemmppllluu”). Nu
este permisă utilizarea unui tablou adit, ional.
2. (25p) Se consideră un set de n oras, e, numerotate de la 1 la n (n ≤ 50), s, i o
“hartă” a conexiunilor aeriene dintre aceste oras, e stocată sub forma unei matrici
A cu n linii s, i n coloane ı̂n care elementul aij este 1 dacă există conexiune directă
ı̂ntre oras, ele i s, i j s, i este 0 dacă nu există conexiune directă (se presupune că
aii = 0 s, i aij = aji pentru orice i s, i j din mult, imea {1, 2, . . . , n}).
Exemplu: Se consideră 5 oras, e s, i matricea de conectivitate directă:
0 1 0 0 1
1 0 0 1 1
A= 0 0 0 1 1
0 1 1 0 1
1 1 1 1 0
(a) Scriet, i o funct, ie/procedură care construies, te tabloul D care cont, ine pentru
fiecare oras, numărul de conexiuni directe (D[i] cont, ine numărul de conexiuni
directe care pornesc din oras, ul i). Exemplu: D = [2, 3, 2, 3, 4].
(b) Scriet, i o funct, ie/procedură care primes, te ca parametru tabloul D s, i afis, ează
oras, ele ı̂n ordinea descrescătoare a numărului de conexiuni directe. Exem-
plu: valorile afis, ate sunt 5, 2, 4, 1, 3.
(c) Scriet, i o funct, ie/procedură care primes, te ca parametri matricea conexiuni-
lor s, i indicii a două oras, e (i s, i j) s, i afis, ează toate variantele de a ajunge din
oras, ul i ı̂n oras, ul j făcând cel mult o escală. Exemplu: pentru i = 2, j = 5
se afis, ează: (2, 5), (2, 1, 5), (2, 4, 5).
(d) Scriet, i o funct, ie/procedură care calculează matricea B = A2 = A × A.
(e) În ipoteza că fiecare oras, este conectat direct cu cel put, in un alt oras, ,
care dintre următoarele afirmat, ii, referitoare la elementele matricii B, este
adevărată?
i. bii = 0 s, i bij = bji pentru orice i s, i j din mult, imea {1, 2, . . . , n};
ii. bii > 1 pentru orice i din mult, imea {1, 2, . . . , n} s, i există cel put, in o
pereche de (i, j) cu proprietatea că bij 6= bji ;
iii. bii cont, ine numărul de conexiuni directe ale oras, ului i. Argumentat, i
răspunsul selectat.
3. (25p) Un lucrător preia pachete (de dimensiuni diferite) de pe o bandă s, i le
stivuies, te astfel ı̂ncât să nu pună niciodată un pachet peste unul de dimensiune
mai mică (dacă un pachet nu poate fi plasat pe niciuna dintre stivele existente
64
este creată o nouă stivă). De exemplu, dacă dimensiunile pachetelor, ı̂n ordi-
nea ı̂n care sosesc pe bandă, sunt [3, 1, 2, 6, 5, 7, 4] atunci stivele constituite sunt
[3, 1], [2], [6, 5, 4], [7].
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
1(a)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
(Răspuns corect: D.)
1(a)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(declararea corectă a funct, iei, a variabilelor locale s, i returnarea rezultatului -
1p; descrierea corectă a calculului sumei - 2p)
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
1(b)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(Răspuns corect: d − 1)
1(b)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 pct.
(Răspuns corect: B.)
1c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; parcurgerea corectă a tabloului cu semnale - 2p; actualizarea corectă a numărului
de utilizatori activi - 3p; determinarea valorii maxime - 4p)
1d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(d)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; calculul corect al numărului de zerouri finale - 4p)
1(d)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 pct.
65
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; condit, ie corectă pentru ies, irea din apelul recursiv - 1p; apel recursiv corect - 1p;
calculul corect al numărului de zerouri finale - 2p)
1e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(e)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea funct, iei/procedurii s, i a variabilelor utilizate - 1p; construirea co-
rectă a noului tablou - 4p)
1(e)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 pct.
(declararea funct, iei/procedurii s, i a variabilelor utilizate - 1p; transformarea
corectă a tabloului - 4p)
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor utilizate - 1p; calculul
sumei elementelor de pe fiecare linie (sau determinarea numărului de valori egale cu 1
de pe fiecare linie) s, i stocarea corectă ı̂n tabloul D - 4p)
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor utilizate - 1p; im-
plementarea corectă a unei metode de sortare - 5p; asigurarea concordant, ei dintre
elementele tabloului D s, i numerele de ordine ale oras, elor - 1p; afis, area numerelor de
ordine ale oras, elor ı̂n ordinea cerută - 1p)
2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor utilizate 1p; afis, area
traseului direct (dacă există) - 1p; afis, area tuturor traseelor cu o escală - 3p)
2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor utilizate 1p; calculul
corect al produsului - 4p)
2e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 pct.
(răspuns corect: iii. - 1p; argumentare: bii = nk=1 aik · aki reprezintă numărul
P
oras, elor k conectate direct cu oras, ul i (aik = 1) - 1p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 pct.
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct.
(definirea unei structuri de date adecvate - 5p; declararea corectă a funct, iei/
procedurii s, i a variabilelor utilizate - 1p; parcurgerea tabloului cu dimensiuni s, i com-
pletarea structurii - 9p)
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(justificarea faptului că un subs, ir strict crescător nu poate avea mai mult de un
element ı̂n aceeas, i stivă - 2p; declararea corectă a funct, iei/procedurii s, i a variabilelor
utilizate - 1p; construirea unui subs, ir strict crescător - 7p)
66
3.4 Sesiunea Iulie 2019
1. (35p)
(a) (10p)
i. (5p) Scriet, i o funct, ie ı̂n C/C++/Pascal care returnează 1 dacă un
număr ı̂ntreg pozitiv primit ca parametru este prim s, i 0 ı̂n caz con-
trar.
ii. (5p) Se consideră un tablou x cu n numere ı̂ntregi pozitive. Scriet, i o
funct, ie/procedură ı̂n C/C++/Pascal care afis, ează toate perechile de
indici (i, j) (i ≤ i < j ≤ n) pentru care suma x[i] + x[j] este număr
prim (se va folosi funct, ia de la punctul precedent).
(b) (10p) Se consideră o funct, ie f : {1, 2, . . . , m} → {1, 2, . . . , n}, (m, n ∈
N, m ≥ n) specificată prin tabloul valorilor sale: v este un tablou uni-
dimensional cu m elemente ı̂n care v[i] = f [i] (se presupune că indicele
tabloului pornes, te de la 1).
i. (2.5p) Care dintre următoarele proprietăt, i este suficientă pentru a ga-
ranta faptul că funct, ia f este bijectivă?
A. m = n;
B. m = n S, I v are elemente distincte (v[i] 6= v[j] pentru orice i 6= j);
C. m = n SAU v are elemente distincte (v[i] 6= v[j] pentru orice
i 6= j);
ii. (2.5p) Câte funct, ii bijective pot fi definite pe o mult, ime {1, 2, . . . , m}?
A. m;
B. m2 ;
C. m!;
2
D. Cm ;
2
E. Am .
iii. (5p) Scriet, i o funct, ie ı̂n C/C++/Pascal care primes, te ca parametru un
număr natural m ≥ 2 s, i un tablou v cu m elemente s, i care returnează
1 dacă v are toate elementele distincte s, i 0 ı̂n caz contrar.
(c) (10p) O secvent, ă de cifre binare este considerată “complementar-concate-
nată” dacă poate fi construită astfel: se pornes, te de la cifra 0 s, i la fiecare
etapă, secvent, a curentă este concatenată cu complementara ei. Exemple de
astfel de secvent, e sunt:
1: 0
2: 01
3: 0110
4: 01101001
5: 0110100110010110
... ...
67
i. (1p) Care dintre afirmat, iile referitoare la o secvent, ă “complementar-
concatenată” este adevărată?
A. numărul de elemente egale cu 1 din secvent, a cu numărul de ordine
n (n ≥ 2) este n − 1;
B. numărul de elemente egale cu 0 din secvent, a cu numărul de ordine
n (n ≥ 2) este 2(n − 2);
C. numărul de elemente egale cu 1 din secvent, a cu numărul de ordine
n (n ≥ 2) este 2n−1 ;
D. numărul de elemente egale cu 1 din secvent, a cu numărul de ordine
n (n ≥ 2) este 2n−2 .
ii. (4p) Scriet, i o funct, ie ı̂n C/C++/Pascal care primes, te ca parametri in-
dicii i s, i j a două elemente dintr-un tablou (variabilă globală) ce cont, ine
valori din {0, 1} (astfel ı̂ncât numărul de elemente din subtabloul definit
de i s, i j este un număr par) s, i returnează 1 dacă cele două jumătăt, i ale
subtabloului definit de i s, i j sunt complementare s, i 0 ı̂n caz contrar (de
exemplu, ı̂n tabloul (0, 0, 1, 0, 0, 1, 0, 1, 1, 0,1, 0)) subtabloul specificat
prin indicii i = 3 s, i j = 10 satisface proprietatea, dar subtabloul cores-
punzător din (0, 0, 1, 0, 0, 1, 0, 1, 0, 1,1, 0) nu satisface proprietatea.
iii. (5p) Scriet, i o funct, ie recursivă care verifică dacă un tablou este o
secvent, ă “complementar-concatenată”. Tabloul va fi considerat vari-
abilă globală (cu n elemente, unde n este o putere a lui 2), iar funct, ia
va primi ca parametri doi indici care specifică port, iunea din tablou care
va fi analizată ı̂n cadrul apelului curent.
(d) (5p) Se consideră că asupra unui tablou unidimensional a cu 2 ≤ n ≤
100 elemente din mult, imea {1, 2, . . . , n} init, ial definit astfel ı̂ncât a[i] = i
(se presupune că indicii ı̂ncep de la 1) a fost aplicată o transformare prin
deplasare circulară către dreapta sau stânga cu k pozit, ii (1 ≤ k < n). Se
pune problema determinării lui k pornind de la tabloul transformat fără a
efectua comparat, ii ı̂ntre elementele tabloului.
i. (2.5p) Care dintre următoarele afirmat, ii sunt adevărate?
A. dacă deplasarea este la dreapta atunci k = n − x[n]
B. dacă deplasarea este la stânga atunci k = n − x[n]
C. dacă deplasarea este la dreapta atunci k = x[1] − 1
D. dacă deplasarea este la stânga atunci k = x[1] − 1
E. indiferent de sensul deplasării k = n − x[n]
F. indiferent de sensul deplasării k = x[1] − 1
G. nu se poate determina k fără a efectua comparat, ii ı̂ntre elementele
tabloului
ii. (2.5p) Dacă se cunoas, te doar tabloul transformat, este posibil să se
determine sensul deplasării? Argumentat, i.
2. (25p) Se consideră o expresie algebrică ce poate cont, ine ca operanzi doar sim-
bolurile x, y s, i z, iar ca operatori doar + s, i −. Se presupune că expresia ı̂ncepe
ı̂ntotdeauna cu un operand (de exemplu, x + y − z + y + z + y s, i z + x + y − x
sunt expresii valide, dar −z + x + y − x, zx + y − x, z + −y − x nu sunt valide).
Se presupune că expresia este reprezentată printr-un tablou unidimensional (E)
68
cu elemente de tip caracter. Să se scrie câte o funct, ie/procedură care primes, te
tabloul de caractere, precum s, i numărul de elemente din acesta (N ) s, i efectuează
prelucrărilre:
(a) (10p) Returnează 1 dacă expresia este validă s, i 0 ı̂n caz contrar.
(b) (15p) Presupunând că expresia este validă, afis, ează varianta simplificată a
expresiei (de exemplu, pentru x + y − x + y + z + y varianta simplificată
este x + 3y, iar pentru y + x − z + x este 2x + y − z).
69
Notă: Pentru fiecare dintre funct, iile/procedurile scrise se vor specifica toate decla-
rat, iile de variabile globale s, i locale necesare s, i se vor pune comentarii explicative. NU
este necesară scrierea programului principal s, i preluarea datelor prin citire.
BAREM
Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 pct.
1a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(a)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; descrierea corectă a algoritmului de verificare dacă un număr este prim - 4p)
1(a)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor de lucru - 1p; des-
crierea corectă a algoritmului de determinare a perechilor care au suma număr prim -
3p; afis, area perechilor - 1p)
1b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(b)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 pct.
(Răspuns corect: B.)
1(b)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 pct.
(Răspuns corect: C.)
1(b)iii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; descrierea corectă a algoritmului de verificare dacă elementele vectorului sunt
distincte - 4p)
1c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
1(c)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 pct.
(Răspuns corect: D.)
1(c)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; descrierea corectă a algoritmului de verificare dacă jumătăt, ile tabloului sunt
complementare - 3p)
1(c)iii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; condit, ie corectă pentru ies, irea din apelul recursiv - 1p; apel recursiv corect - 1p;
verificarea proprietăt, ii de tablou complementar - 2p)
1d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 pct.
1(d)i. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 pct.
70
(Răspunsuri corecte: A., D.)
1(d)ii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 pct.
(Nu este posibil să se determine sensul transformării deoarece acelas, i rezultat
poate fi obt, inut prin deplasarea la dreapta cu k pozit, ii s, i prin deplasarea la stânga cu
h pozit, ii. De exemplu, pentru n = 5, tabloul (3, 4, 5, 1, 2) se poate obt, ine atât prin
deplasare la dreapta cu k = 3 pozit, ii cât s, i prin deplasare la stânga cu h = 2 pozit, ii).
Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 pct.
2a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei, a variabilelor de lucru s, i returnarea rezultatului
- 1p; descrierea corectă a algoritmului de verificare dacă expresia este validă - 7p;
descriere idee de rezolvare - 2p)
2b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 pct.
(declararea corectă a funct, iei/procedurii s, i a variabilelor de lucru - 1p; deter-
minarea corectă a coeficient, ilor operanzilor (x, y s, i z) - 6p; afis, area corectă a expresiei
simplificate: verificare existent, ă operand - 3p; analiză semn - 3p; descriere idee de
rezolvare - 2p)
Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 pct.
3a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei s, i a variabilelor de lucru - 1p; descrierea corectă a
algoritmului de verificare că toate elementele din tablou sunt egale cu 1 - 3p; descrierea
corectă a algoritmului de verificare că există cel put, in un zero ı̂ncadrat de 1 - 5p;
returnarea rezultatului - 1p)
3b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(declararea corectă a funct, iei s, i a variabilelor de lucru - 1p; descrierea corectă a
algoritmului de determinare a indicilor liniilor de unde ı̂ncepe s, i unde se termină discul
(de exemplu, linia i1 s, i linia i2 ) - 8p; calculul diametrului (de exemplu, i2 − i1 + 1) s, i
returnarea rezultatului - 1p)
3c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 pct.
(descriere idee de rezolvare - 2p; declararea corectă a funct, iei, a variabilelor
de lucru s, i returnarea rezultatului - 1p; descrierea corectă a algoritmului de verificare
dacă discul cont, ine sau nu pete, prin parcurgerea liniilor matricii, apelând funct, ia de
la punctul (a) - 7p)
71