Sunteți pe pagina 1din 2

2012

Se consider sirul de numere naturale x = 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, . . . (fiecare numr


natural nenul apare, n ordine, de un numr de ori egal cu el nsusi). a) Se d un numr natural
nenul n. S se scrie un program care afiseaz primii n termeni al sirului x. b) Se d un numr
natural nenul n. S se scrie un program care afiseaz n timp constant (care nu depinde de n) al
n-lea termen al sirului x. c) Se d un numr natural nenul n si n numere naturale nenule
y1, . . . , yn. S se scrie un program care verific (afisnd DA, respectiv NU) dac exist o
permutare a termenilor y1, . . . , yn care s fie identic cu primii n termeni ai sirului x. d) Dai o
soluie n timp liniar (n funcie de n) cerinei de la punctul c).

Se dau n cercuri de raze r1, r2, . . . , rn. Aceste cercuri sunt mpachetate ntr-un
dreptunghi astfel: toate cercurile sunt tangente la baza dreptunghiului, cercurile sunt aranjate n
ordinea iniial (cel mai din stnga fiind cercul de raz r1, cel mai din dreapta cercul de raz rn),
iar cercurile consecutive (de raze ri si respectiv ri+1) sunt tangente. S se scrie un program
care calculeaz limea minim a dreptunghiului n care ncap cercurile. Rezultatul se va afisa
cu trei zecimale exacte. Spre exemplu, dac n = 3, r1 = 2, r2 = 1 si r3 = 2, atunci rezultatul
care trebuie afisat este 9.656. Not: Programul va fi scris ntr-unul dintre limbajele de
programare studiate n liceu (Pascal,C,C++). Se vor descrie informal detaliile algoritmului folosit
si ale implementrii sub form de program: semnificaia variabilelor, a structurilor de date, a
structurilor repetitive, a instruciunilor condiionale.

2013
Se consider o secven de numere naturale x1, x2, . . . , xn. Din aceast secven se pot
obine alte secvene folosind urmtoarea operaie: se extrage elementul de pe poziia i(i > 1), se
mut toate elementele situate la stnga poziiei i cu o poziie la dreapta, iar elementul de pe
poziia i se plaseaz pe prima poziie a secvenei.
(a) S se realizeze un program care primind o secven de numere naturale x1, x2, . . . , xn
afiseaz toate secvenele care se pot obine din aceasta folosind o singur dat operaia
definit mai sus. Ordinea n care sunt afisate secvenele rezultate nu conteaz. De exemplu din
secvena 1,2,3 folosind o singur operaie, mutnd elementul de pe poziia 2 se pot obtine
secvena 2,1,3 si mutnd de pe poziia 3 se obtine secvena 3,1,2.
(b) S se realizeze un program care primind dou permutari x1, x2, . . . , xn si y1, y2, . . . ,
yn ale mulimii {1, . . . , n} afiseaz o secven de operaii de tipul de mai sus prin care
permutarea x1, x2, . . . , xn se poate transforma n permutarea y1, y2, . . . , yn. O operaie va fi
afisat prin acel element xi care se mut pe prima poziie. De exemplu dac se primesc
permutrile: 4,5,6,7,8,9,3,1,2 si 4,9,6,5,7,8,3,1,2 o posibil iesire a programului este: 6,9,4
adic din prima permutare se extrage 6 si se pune n fa, apoi se extrage 9 si se pune in fa,
iar apoi se extrage 4 si se pune in fa.

Fie n un numar natural nenul si m = 2n . Se da vectorul 0, 1, 2, 3, . . . , m, m + 1 si p,


cu 1 p m. In acest vector, marcam numerele 0, p si m + 1 ca fiind sterse. Exemplu:
Pentru n = 3 si p = 5, avem vectorul X, 1, 2, 3, 4, X, 6, 7, 8, X unde elementele 0, 5 si 9 sunt
marcate cu X ca fiind sterse. (a) Scrieti un program care sa stearga toate elementele
vectorului, n n pasi, n asa fel ncat la pasul k sa se stearga 2k1 elemente, dintre cele

nesterse pana la pasul respectiv. Programul va afisa m 1 perechi de forma (k, q) unde q
este unul dintre elementele vectorului, diferit de p, iar k este pasul la care a fost sters q.
Programul scris trebuie sa aiba complexitatea timp liniara n functie de m, adica numarul
de instructiuni ale programului sa fie aproximativ egal cu dimensiunea vectorului. (b) Scrieti
un program similar cu cel de la punctul (a), dar cu urmatoarea conditie suplimentara: dupa
pasul k, ntre oricare doua elemente deja sterse consecutive sa nu fie o distanta mai mare
de 2nk , unde prin distanta dintre i si j se ntelege |j i|. Calculati complexitatea timp n
functie de n a programului pe care l-ati scris. Exemplu: Consideram vectorul X, 1, 2, 3, 4, X, 6,
7, 8, X. Printr-o posibila strategie de stergere, continutul vectorului dupa fiecare pas k este:
X, 1, X, 3, 4, X, 6, 7, 8, X (dupa pasul 1), X, 1, X, 3, X, X, 6, X, 8, X (dupa pasul 2), respectiv X,
X, X, X, X, X, X, X, X, X (dupa pasul 3). Rezultatul afisat de program n acest caz este
secventa (1,2),(2,4),(2,7),(3,1),(3,3),(3,6),(3,8).