Sunteți pe pagina 1din 7

TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC

Construcţii
1. Să se construiască un tablou unidimensional cu primele n numere prime (nϵN*, n≤100)
Ex: n=5----------- 2 3 5 7 11
2. Să se construiască un tablou unidimensional cu primele n numere Fibonacci (nϵN*, n≤100)
Ex: n=5----------- 1 1 2 3 5
*
3. Să se construiască un tablou unidimensional cu primii n (nϵN , n≤100) termeni ai şirului
1,2,1,3,2,1,4,3,2,1,…
4. Să se construiască un tablou unidimensional cu primii n (nϵN*, n≤100) termeni ai şirului
xn=2*xn-1+xn-2-1, x1=1, x2=1
5. Să se construiască un tablou unidimensional cu primii n (nϵN*, n≤100) termeni ai şirului
2,1,4,3,6,5,…
6. Să se construiască un tablou unidimensional cu primii n (nϵN*, n≤100) termeni ai şirului
1,2,4,5,8,10,16,20,… (de forma 2k5t).
7. Să se construiască un tablou unidimensional cu primii n (nϵN*, n≤100) termeni ai şirului
1,2,2,3,3,3,4,4,4,4,…
8. Să se construiască un tablou unidimensional cu primii n (nϵN*, n≤100) termeni ai şirului
1,2,3,4,7,6,8,9,12,14,16,… (de forma ).
9. Se citește un tablou unidimensional cu n (nϵN*, n≤1000) elemente numere reale. Să se insereze între
oricare 2 elemente alăturate media lor aritmetică.
10. Se consideră un şir v de n (nϵN*, n≤1000) numere naturale cu cel mult 4 cifre fiecare. Să se determine
valoarea maximă a expresiei v[i]-v[j], unde i<j. (O(n) complexitate timp)
11. Se consideră o mulțime v cu n (nϵN*, n≤1000) numere naturale nenule cu cel mult 4 cifre fiecare. Să se
determine o submulțime a sa a cărei sumă a elementelor este divizibilă cu n. (O(n) complexitate timp).
12. Se dă un vector v de n elemente egale cu 1. Prin partiție a vectorului v înțelegem o împărțire a vectorului
în subvectori, astfel încât fiecare element al vectorului v apare exact o dată într-unul dintre subvectori.
Pentru fiecare partiție a vectorului v în k subvectori v11, . . . , v1n1 , v21 . . . , v2n2 , . . . , vk1, . . . , vknk , se
calculează produsul sumelor elementelor din fiecare subvector al partiției.
a) Să se scrie un program care determină cel mai mare produs calculat în acest fel pentru toate partițiile
posibile ale vectorului v.
b) Există o soluție la punctul a) care să nu calculeze toate produsele posibile?
13. Fie multimea de numere H = {2 x · 3 y · 5 z | x, y, z ∈ N}. Sa se rezolve urmatoarele cerințe într-unul dintre
limbajele de programare studiate în liceu (Pascal/C/C++):
a) Sa se scrie o procedura care pentru un numar natural a ≤ 32000 decide daca a aparține mulțimii H. Sa
se determine complexitatea timp a acestei proceduri în funcție de a.
b) Dandu-se un numar natural n ≤ 100, sa se afiseze primele n numere ale mulțimii H, în ordine
crescatoare. De exemplu, pentru n = 8 trebuie afisate numerele: 1, 2, 3, 4, 5, 6, 8, 9.
c) Dați o soluție în timp O(n), liniar în funcție de n, pentru cerința de la punctul b). Justificați.
14. Fie n un număr natural nenul și m = 2n . Se dă vectorul 0, 1, 2, 3, . . . , m, m + 1 și p, cu 1 ≤ p ≤ m. în acest
vector, marcăm numerele 0, p și m + 1 ca fiind șterse. Exemplu: Pentru n = 3 și p = 5, avem vectorul X, 1,
2, 3, 4, X, 6, 7, 8, X unde elementele 0, 5 și 9 sunt marcate cu X ca fiind șterse.
(a) Scrieți un program care să șteargă toate elementele vectorului, în n pași, în așa fel încât la pasul k să
se șteargă 2k−1 elemente, dintre cele neșterse până la pasul respectiv. Programul va afișa 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 șters
q. Programul scris trebuie să aibă complexitatea timp liniară în funcție de m, adică numărul de
instrucțiuni ale programului să fie aproximativ egal cu dimensiunea vectorului.
(b) Scrieți un program similar cu cel de la punctul (a), dar cu următoarea condiție suplimentară: după
pasul k, între oricare două elemente deja șterse consecutive să nu fie o distanță mai mare de 2n−k , unde
prin distanța dintre i și j se înțelege |j − i|. Calculați complexitatea timp în funcție de n a programului pe
care l-ați scris.
Exemplu: Considerăm vectorul X, 1, 2, 3, 4, X, 6, 7, 8, X. Printr-o posibilă strategie de ștergere, conținutul
vectorului după fiecare pas k este: X, 1, X, 3, 4, X, 6, 7, 8, X (după pasul 1), X, 1, X, 3, X, X, 6, X, 8, X (după
pasul 2), respectiv X, X, X, X, X, X, X, X, X, X (după pasul 3). Rezultatul afișat de program în acest caz este
secvența (1,2),(2,4),(2,7),(3,1),(3,3),(3,6),(3,8).
15. Se dau n siruri formate din cifre de la 1 la 8 (inclusiv), de lungime maxima 500. Toate sirurile sunt
repetate de k ori sau de multiplu de k ori, cu exceptia unui singur sir, care nu este repetat de k ori, sau de

Page | 1
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
multiplu de k ori. Sa se afiseze sirul care nu se repeta. ( 1 <= n <= 32000, k < 2005 )
16. Suma cifrelor numerelor de la 1 la n.
17. Numărați toate numerele de la 1 la n care conțin cifra dată 4.
18. Fie mulțimea S = ,1,2,. . . ,n-, unde n ≥ 4 este un număr natural multiplu de 4. Scrieți un program C/C++
care:
a) Citește de la tastatură numărul n ≥ 4 precum și un număr natural p (1 ≤ p ≤ n/2). În cazul în care
condițiile impuse nu sunt îndeplinite, va fi afișat mesajul ”date invalide”.
b) Partiționează mulțimea dată S în două submulțimi disjuncte A și B (S = A ∪ B, A ∩ B = ∅) astfel încât
suma elementelor din A să fie egală cu suma elementelor din B.
c) Elimină elementul p din mulțimea S și creează o nouă partiție A′ , B′ (eventual, modificând partiția
creată la punctul b) astfel încât S ∖ ,p- = A′ ∪ B ′ , A ′ ∩ B ′ = ∅ și suma elementelor din A′ este egală cu
suma elementelor din B′ . În cazul în care acest lucru nu este posibil, va fi afișat mesajul ”partiție
inexistentă”.
Exemplu: Pentru n=8, S = ,1,2,3,4,5,6,7,8-, partiția inițială este A = ,1,3,6,8-, B = ,2,4,5,7-. Dacă p=1 sau
p=3, va afișa ”partiție inexistentă”. Dacă p=2, partiția modificată este A ′ = ,3,6,8-, B ′ = ,1,4,5,7-. Dacă
p=4, partiția modificată este A ′ = ,2,6,8-, B ′ = ,1,3,5,7-.

Parcurgeri, calcule, min, max


1. Se consideră un şir de n (nϵN*, n≤100) numere întregi. Să se afle maximul şi minimul elementelor din
şir.
2. Se consideră un şir de n (nϵN*, n≤100) numere întregi. Să se afişeze toate poziţiile unde se găseşte
maximul.
3. Se consideră un şir de n (nϵN*, n≤100) numere întregi. Să se afişeze prima şi ultima poziţie unde se
găseşte maximul.
4. Se citește un număr natural n cu minim 3 cifre și maxim 15. Să se elimine o singură cifră din n astfel
încât numărul rămas să fie maxim, respectiv minim.
5. Să se verifice dacă un vector v este simetric.
6. Se consideră un şir de n (nϵN*, n≤100) numere reale. Să se afişeze:
a. câte elemente din vector sunt pozitive şi câte sunt negative
b. media aritmetică a celor subunitare cu 3 zecimale exacte
c. interschimbarea primului element întreg din tablou cu ultimul element întreg
7. Se consideră un şir de n (nϵN*, n≤100) numere reale. Se cere:
a. să se înlocuiască numerele pozitive cu media aritmetică a ultimelor k
b. să se interschimbe primul element întreg din tablou cu ultimul element întreg
c. să se verifice dacă toate elementele din şir au doar cifre pare la partea întreagă
d. să se verifice dacă există numere în şir de forma c1.c2, unde c1 şi c2 sunt cifre impare
8. Scrieţi un program care citeşte de la tastatură elementele unui tablou unidimensional cu exact 10
numere naturale, mai mici decât 1000, determină şi afişează pe ecran, separate prin câte un spaţiu,
numărul de elemente din şir care sunt multipli ai numărului 13 şi, în continuare, poziţiile pe care
acestea se găsesc în şir. Elementele tabloului sunt numerotate de la 1 la 10. Exemplu: dacă şirul citit
este 2, 6, 26, 14, 130, 11, 8, 23, 39, 52, se vor afişa numerele 4 și 3 5 9 10.
9. Se consideră un şir de n (nϵN*, n≤100) numere naturale. Să se afişeze lungimea celei mai lungi secvenţe
de numere prime din şir.
10. Se consideră un şir de n (nϵN*, n≤100) numere naturale. Să se afişeze cea mai lungă secvenţă de
numere impare din şir. Dacă sunt mai multe se va afişa prima.
11. Se consideră un şir de n (nϵN*, n≤100) numere naturale. Să se afişeze cea mai lungă secvenţă din şir cu
proprietatea că fiecare număr este prefixul următorului element din secvenţă (mai puţin ultimul). Dacă
sunt mai multe se va afişa ultima.
12. Scrieţi un algoritm care citeşte de la tastatură elementele unui tablou unidimensional v cu n (nϵN*,
n≤100) numere naturale, cu cel mult 7 cifre fiecare și interschimbă cel mai mic element par şi cel mai
mare element impar din tablou. Dacă tabloul nu conţine nici un element par sau niciun element impar,
el va rămâne neschimbat. Exemplu: pentru n=6 şi pentru v având valorile (2,3,17,6,1,24), tabloul va
avea următoarea formă: (17,3,2,6,1,24).
13. Se consideră un şir de n (nϵN*, n≤100) numere întregi, printre care existã cel puţin un element pozitiv.
Scrieţi un program având complexitatea timp O(n) care determină prima secvenţă având suma
elementelor maximă.
Page | 2
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
Exemplu: pentru n=10 şi şirul: 1 2 -6 3 4 5 2 10 -7 6, secvenţa de sumă maximă este: 3 4 5 2 10
14. Se consideră un şir de n (nϵN*, n≤100) numere întregi, printre care existã cel puţin un element pozitiv.
Scrieţi un program având complexitatea timp O(n) care determină suma maximă a unei secvenţe de
lungime k. Exemplu: pentru n=10, k=3 şi şirul: 1 2 6 3 4 5 2 1 5 6, suma maximă este: 13
15. Scrieţi un program care citeşte de la tastatură cele 10 numere reale ce compun vectorul a şi apoi cele 8
numere reale ce constituie componentele vectorului b şi afişează pe ecran câte dintre componentele
vectorului a sunt strict mai mici decât toate componentele vectorului b.
16. Se citeşte un vector cu n elemente numere naturale. Să se înlocuiască fiecare element a*i+ (i≥2) cu cea
mai mare putere a lui i care este mai mică sau egală cu a*i+.
Exemplu: Vectorul {11,24,43,90,80} devine {11,16,27,64,25}.
17. Afișați toate m-elementele unui vector. Un m-element este un număr din vector care este mai mare
decât toate elementele aflate în dreapta sa.
Exemplu: ,16, 17, 4, 3, 5, 2- →17 5 2
18. Triunghiul lui Pascal (20 puncte) Triunghiul lui Pascal
este un triunghi isoscel cu mai multe linii orizontale
formate din numere naturale astfel: laturile egale
conțin doar cifra 1, iar fiecare număr de pe o linie n
reprezintă suma celor două numere vecine de pe linia
superioară n – 1, pentru n > 1. Liniile sunt numerotate
de sus în jos începând de la 0, ca în figura alăturată:
Scrieți un subalgoritm care generează numerele aflate
pe linia r (2 ≤ r ≤ 32), fără a folosi structuri de date
bidimensionale. Parametrul de intrare este numărul
natural r, iar parametrul de ieșire va fi șirul numerelor
de pe linia r.

19. Un număr natural nenul nr are forța k dacă în reprezentarea sa binară există exact k cifre egale cu 1. De
exemplu, numărul 23 are forța 4 (în reprezentarea sa binară există 4 cifre egale cu 1). Fiind dat un șir de
numere, numim grup de forță k al său un subșir de elemente din șirul dat care au forța k, elementele
fiind considerate în ordinea din șirul inițial. De exemplu, pentru șirul s = (7, 12, 3, 13, 24, 19), grupul de
forță k = 2 este (12, 3, 24). Scrieți un subalgoritm care determină toate grupurile de forță care se pot
forma cu elementele șirului x. Parametrii de intrare sunt șirul de numere naturale nenule x cu elemente
distincte mai mici decât 30 000 și lungimea n a șirului (1 < n < 100). Parametrii de ieșire vor fi nrGr
(numărul grupurilor) și grupuri (grupurile formate, ordonate crescător după forța lor).
Exemplu: dacă n = 6 și x = (12, 3, 24, 16, 15, 32), atunci nrGr = 3 și grupuri va fi (16, 32), (12, 3, 24), (15).

20. Se consideră o secvență de numere naturale x1, x2, . . . , xn. Din această secvență se pot obține alte
secvențe folosind următoarea operație: se extrage elementul de pe poziția i(i > 1), se mută toate
elementele situate la stânga poziției i cu o poziție la dreapta, iar elementul de pe poziția i se plasează
pe prima poziție a secvenței. (a) Să se realizeze un program care primind o secvență de numere
naturale x1, x2, . . . , xn afișează toate secvențele care se pot obține din aceasta folosind o singură dată
operația definită mai sus. Ordinea în care sunt afișate secvențele rezultate nu contează. De exemplu
din secvența 1,2,3 folosind o singură operație, mutând elementul de pe poziția 2 se pot obtine
secvența 2,1,3 și mutând de pe poziția 3 se obtine secvența 3,1,2. (b) Să se realizeze un program care
primind două permutari x1, x2, . . . , xn și y1, y2, . . . , yn ale mulțimii {1, . . . , n} afișează o secvență de
operații de tipul de mai sus prin care permutarea x1, x2, . . . , xn se poate transforma în permutarea y1,
y2, . . . , yn. O operație va fi afișată prin acel element xi care se mută pe prima poziție.
De exemplu dacă se primesc permutările: 4,5,6,7,8,9,3,1,2 și 4,9,6,5,7,8,3,1,2 o posibilă ieșire a
programului este: 6,9,4 adică din prima permutare se extrage 6 și se pune în față, apoi se extrage 9 și se
pune in față, iar apoi se extrage 4 si se pune in față.

Vector frecvenţă/caracteristic
1. Fiind dat un număr natural n între 1 şi două miliarde să se afişeze cifrele şi numărul de elemente al mulţimii
cifrelor sale.
Exemplu: Numărul 234234234 conţine 3 cifre distincte, 2, 3 şi 4.
2. Se dă o secvenţă de n numere naturale din intervalul [1,999+. Să se afişeze numerele în ordinea lor
crescătoare.
Page | 3
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
3. Se citesc două numere naturale n şi m. Să se afişeze numărul de cifre disticte comune.
Exemplu: n=174233, m=9877273----------------->3 (2,3,7)
4. Fiind dat un număr natural n nenul ≤1000000000000000 să se afişeze cel mai mare număr care se poate
forma cu cifrele sale.
Exemplu: n=801232----------------->832210
5. Fiind dat un număr natural n nenul ≤1000000000000000 să se afişeze cel mai mic număr care se poate
forma cu cifrele sale.
Exemplu: n=801232----------------->102238
6. Se citesc două numere, n şi k. Să se afişeze cel mai mic număr de k cifre care se poate forma cu cifrele lui n.
7. Se citesc două submulțimi A și B ale mulțimii ,1,2,3,...,10000- cu m, respectiv n elemente. Să se afișeze:
 Intersecția celor 2 mulțimi
 Reuniunea celor două mulțimi
 Diferența celor două mulțimi
8. Se citeşte un număr natural n (n<=1000), apoi un şir de n numere naturale cuprinse între 1 şi 100. Se citeşte
de asemenea un număr natural k. Să se afişeze elementele care apar de exact k ori în şir. De exemplu,
pentru n=10, a = (4, 2, 8, 4, 2, 8, 8, 4, 5, 1) şi k=3, se vor afişa 4, 8 (numai aceste numere apar de exact 3 ori).
9. Să se genereze submulțimile mulțimii {1,2,...,n}.
10. Să se verifice dacă o mulțime se poate împărți în perechi de sumă k. Elementele mulțimii sunt numere
naturale cu cel mult 6 cifre.
Ex: v={9,7,5,3}, k=12 →DA ((3,9) ,(5,7)}

11. Un grǎdinar pasionat de tehnologie decide sǎ foloseascǎ o „armatǎ” de roboți pentru a uda straturile din
grǎdina sa. El dorește sǎ foloseascǎ apǎ de la izvorul situat la capǎtul cǎrǎrii principale care strǎbate grǎdina.
Fiecǎrui strat ȋi este asociat un robot și fiecare robot are de udat un singur strat. Toți roboții pornesc de la
izvor ȋn misiunea de udare a straturilor la aceeași orǎ a dimineții (spre exemplu 5:00:00) și lucreazǎ în
paralel și neȋncetat un același interval de timp. Ei parcurg cǎrarea principalǎ pȃnǎ la stratul lor, pe care ȋl udă
și revin la izvor pentru a-și reumple rezervorul de apǎ. La finalul intervalului de timp aferent activității, toți
roboții se opresc simultan, indiferent de starea lor curentă. Inițial, la izvor este amplasat un singur robinet.
Grǎdinarul constată însă cǎ apar ȋntȃrzieri ȋn programul de udare a plantelor deoarece roboții trebuie sǎ
aștepte la rȃnd pentru reumplerea rezervoarelor cu apǎ, astfel ȋncȃt considerǎ cǎ cea mai bunǎ soluție este
sǎ instaleze mai multe robinete pentru alimentarea roboților. Roboții pornesc dimineața cu rezervoarele
umplute. Doi roboți nu îşi pot umple rezervorul în acelaşi moment de la acelaşi robinet.
Se cunosc: intervalul de timp t cât cei n roboți lucrează (exprimat în secunde), numărul de secunde di
necesare pentru a parcurge distanța de la izvor la stratul asociat, numărul de secunde ui necesar pentru
udarea acestui strat și faptul cǎ umplerea rezervorului propriu cu apǎ dureazǎ exact o secundǎ pentru
fiecare robot (t, n, di , ui - numere naturale, 1 ≤ t ≤ 20000, 1 ≤ n ≤ 100, 1 ≤ di ≤ 1000, 1 ≤ ui ≤ 1000, i = 1, 2,
..., n). Cerințe:
a. Enumerați roboții care se întâlnesc la izvor la un anumit moment de timp mt (1 ≤ mt ≤ t). Justificați
răspunsul. Notă: roboții se identifică prin numărul lor de ordine.
b. Care este numǎrul minim de robinete suplimentare minRobineteSuplim pe care trebuie sǎ le instaleze
grǎdinarul astfel încȃt roboții sǎ nu aștepte deloc unul după altul pentru reumplerea rezervorului? Justificați
răspunsul.
c.Scrieți un subalgoritm care determină numǎrul minim de robinete suplimentare minRobineteSuplim.
Parametrii de intrare sunt numerele n și t, șirurile d și u cu câte n elemente fiecare, iar parametrul de ieșire
este minRobineteSuplim.
Exemplu 1: dacă t = 32, n = 5, d = (1, 2, 1, 2, 1), u = (1, 3, 2, 1, 3) atunci minRobineteSuplim = 3. Explicație:
robotul care se ocupǎ de stratul 1 are nevoie de o secundă pentru a ajunge la strat, o secundă pentru a uda
stratul și de încă o secundă pentru a se întoarce la izvor; el se ȋntoarce la izvor pentru a-și reumple
rezervorul dupǎ 1 + 1 + 1 = 3 secunde de la ora de plecare (5:00:00), deci la ora 5:00:03; el își reumple
rezervorul ȋntr-o secundă și pornește ȋnapoi spre strat la ora 5:00:04; revine la ora 5:00:07 pentru a-și
reumple rezervorul, continuȃnd ritmul de udare a straturilor, ș.a.m.d.; deci, primul, al doilea, al patrulea și al
cincilea robot se ȋntȃlnesc la izvor la ora 05:00:23; în consecință, este nevoie de 3 robinete suplimentare.
Exemplu 2: dacă t = 37, n = 3, d = (1, 2, 1), u = (1, 3, 2), atunci minRobineteSuplim = 1.

Page | 4
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
Ciurul lui Eratostene Verificarea primalităţii numărului n natural
bool ciur[10001]={0}; if(n<2) prim=0;
int n;ciur[1]=1; else {
… prim=1;
for(i=2;i*i<=n;i++) for(d=2;d*d<=n && prim;d++)
if(ciur[i]==0) if(n%d==0) prim=0;
for(j=i*i;j<=n;j+=i) }
ciur[j]=1;

1. Să se descompună un numar natural n în toate modurile ca suma de două numere prime. Dacă nu există nicio
descompunere, atunci să se afişeze 0.
2. Dându-se un număr natural n, să se determine numărul numerelor prime mai mici sau egale cu n (nϵN*,
n≤1000)
3. Să se determine cel mai mic număr prim >n și cel mai mare număr prim <n, unde nϵN, 4≤n≤10000
4. Gigel, mare amator de probleme de matematică şi informatică, a observat că unele numere prime au o
proprietate interesantă: orice cifră ar elimina dintr-un astfel de număr, numărul obţinut este tot număr prim. A
numit astfel de numere numere extraprime. De exemplu, numărul 317 este un număr extraprim: el este număr
prim şi, în plus, dacă eliminăm cifra 3, obţinem 17, care este prim; dacă eliminăm 1, obţinem 37, care este
prim; dacă eliminăm 7, obţinem 31, care este şi el număr prim.
Fiind date două valori naturale a şi b, să se determine câte numere extraprime există între a şi b, precum şi cel
mai mic şi cel mai mare număr extraprim dintre a şi b.
Exemplu: în intervalul [10,100] se află 4 numere extraprime (23, 37, 53 şi 73).
5. Factorialul unui număr natural nenul n, notat n!, se defineşte ca fiind produsul numerelor naturale de la 1 la n.
Una dintre modalităţile de reprezentare a factorialului este prin enumerarea factorilor primi pe care îi conţine
şi a exponenţilor acestora.
Fiind dat un număr natural n≤100000, scrieţi un program care determină suma exponenţilor factorilor primi
corespunzători descompunerii în factori primi a lui n factorial.
Exemplu: 5! = 1*2*3*4*5 = 23 * 31 * 51------------>3+1+1=5
6. Calculați numărul de divizori ai lui n!

Schimbarea ordinii elementelor în vector


Sortarea crescătoare a unui vector vMn(R)
1. METODA BULELOR 2. METODA INTERSCHIMBĂRII
m=n; for(i=1;i<n;i++)
do{ for(j=i+1;j<=n;j++)
nusortat=0; if(v[i]>v[j])
for(i=1;i<m;i++) {aux=v[i];v[i]=v[j];v[j]=aux;}
if(v[i]>v[i+1])
{aux=v[i];v[i]=v[i+1];
v[i+1]=aux;nusortat=1;}
m--;
}
while(nusortat);

Inserarea elementului x pe poziţia i în vectorul v Ştergerea elementului de pe poziţia i din vectorul v cu n


de dimensiune n componente
n++; for(k=i;k<n;k++) v[k]=v[k+1];
for(k=n;k>i;k--) v[k]=v[k-1]; n--;
v[i]=x;

Permutarea circulară a vectorului vMn(R) cu o poziţie spre stânga


aux=v[1];
for(i=1;i<=n-1;i++) v[i]=v[i+1];
v[n]=aux;

Interclasarea a doi vectori a[m] şi b[n] sortaţi Căutarea binară( căutarea lui nr se face într-un vector
crescător a[n] sortat crescător)
i=1;j=1;k=0; st=1;dr=n;gasit=0;
while(i<=m && j<=n) while(!gasit && st<=dr)
if(a[i]<b[j]) {
{k++;c[k]=a[i];i++;} mijloc=(st+dr)/2;
Page | 5
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
else if(nr==a[mijloc]) gasit=1;
{k++;c[k]=b[j];j++;} else if(nr<a[mijloc]) dr=mijloc-1;
while(i<=m) else st=mijloc+1;
{k++;c[k]=a[i];i++;} }
while(j<=n)
{k++;c[k]=b[j];j++;}

Căutare binară:
 cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
int m, poz=-1;
while (st <= dr)
{
m = (st + dr) / 2;
if (a[m] <= x)st = m + 1;
else dr = m - 1;
if (v[m] == x)
poz = m;
}
cout<<poz;

 cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca
cel mai mic numar al sirului este mai mic sau egal decat x
int m, poz=-1;
while (st <= dr)
{
m = (st + dr) / 2;
if (a[m] <= x){st = m + 1; poz = m;}
else dr = m - 1;
}
cout<<poz;

cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel
mai mare numar din sir este mai mare sau egal decat x
int m, poz=-1;
while (st <= dr)
{
m = (st + dr) / 2;
if (a[m] >= x){dr= m – 1; poz = m;}
else st = m + 1;
}
cout<<poz;

1. Să se inverseze ordinea elementelor într-un vector.


2. Se consideră un şir de n (nϵN*, n≤100) numere întregi cu maxim 4 cifre fiecare. Să se mute ultimul element
pe prima poziţie în faţa celorlalte.
3. Se consideră un şir de n (nϵN*, n≤100) numere reale. Să se insereze după fiecare element pozitiv valoarea
primului element.
4. Se consideră un şir de n (nϵN*, n≤100) numere naturale cu maxim 4 cifre fiecare. Să se ordoneze crescător
după penultima cifră.
5. Se consideră un şir de n (nϵN*, n≤100) numere reale. Să se șteargă toate numerele întregi din șir.
6. Se dă un vector v cu n elemente numere întregi. Să se rearanjeze elementele vectorului astfel încât cele
pare să fie la început. Nu contează ordinea. (O(n) complexitate timp)
7. Se dă un vector v cu n elemente numere întregi. Să se ordoneze crescător elementele din vector.
8. Se dă un vector v cu n elemente numere întregi. Să se ordoneze descrescător elementele pare din vector.
9. Se dă un vector v cu n elemente numere întregi. Să se ordoneze crescător elementele aflate în prima
jumătate a vectorului şi descrescător cele aflate în a II-a jumătate.
10. Inseraţi elementul x pe poziţia k într-un vector.
11. Ştergeţi toate apariţiile elementului x dintr-un vector.
12. Se citeşte un vector a cu n elemente întregi. Să se transforme în mulţime prin eliminarea elementelor care
se repetă.

Page | 6
TABLOURI UNIDIMENSIONALE ANA ÎNTUNERIC
13. Se dă un vector v cu n elemente numere întregi. Fără a folosi un vector auxiliar, să se mute la sfârşitul lui v
elementele sale nule, păstrând ordinea celorlalte elemente. Ex: v=( 2,3,0,9,0,0,8) ---- (2,3,9,0,0,0)
14. Se citeşte un şir de n elemente. Să se rearanjeze numerele în şir astfel încât cele pare să ocupe primele
poziţii în ordine crescătoare. Ex: (7,8,5,2,10,4)-----(2,4,8,7,5)
15. Să se permute circular spre stânga cu 3 poziţii vectorul v cu n componente numere reale (n≤50).
16. Să se permute circular spre dreapta cu 2 poziţii vectorul v cu n componente numere reale (n≤50).
17. Se citeşte un vector a cu n elemente numere întregi. Să se elimine un număr minim de elemente din
vectorul a astfel încât elementele rămase să fie ordonate strict crescător. Primul element din vector nu se
elimină.
18. Se citeşte un vector a cu n elemente numere întregi. Să se elimine un număr minim de elemente din
vectorul a astfel încât elementele rămase să fie ordonate strict crescător. Primul element din vector nu se
elimină.
19. Să se determine poziția primei apariții a lui x într-un vector ordonat crescător.
20. Să se determine numărul de apariții ale valorii x într-un vector ordonat crescător.
21. Să se determine poziția valorii maxime dintr-un vector cu aspect de deal.
Exemplu: n=7, (1,3,6,5,4,3,1)---------->3
22. Andrei are N betisoare de lungimi nu neaparat diferite. El vrea să afle în câte moduri poate alege trei
bețișoare astfel încât să poată forma cu ele un triunghi. Restricții și precizări
 1 ≤ N ≤ 800
 1 ≤ lungimea unui betisor ≤ 30000
 se consideră triunghiuri și cele care au un unghi de 180 de grade și celelalte două de 0 grade
(2 segmente coliniare se confundă cu al 3-lea)
Exemplu: Pentru n=4 și valorile 2,3,7,4, se va afișa 2, deoarece singurele triunghiuri care se pot forma
sunt alcătuite din următoarele betișoare (date prin numarul de ordine):
1, 2, 4
2, 3, 4
23. Se citește un număr n mai mic decat 2000000000 și apoi se citesc n numere naturale cu cel mult 2 cifre
fiecare. Afișați lungimea celei mai lungi secvente din numerele citite care are proprietatea că începe și se
termină cu aceeași valoare și nu mai conține acea valoare (în afară de primul și ultimul element al
secvenței).
14 7
Exemplu:
32434234567255

24. Se citesc numerele naturale nenule a, b, c, n, urmate de o secvență de n numere naturale distincte, notată
cu s. (a) Să se scrie un program care afișează toate perechile (x, y) cu proprietatea că x și y sunt numere
diferite din secvența s, care verifică ecuația ax2 + by2 = c. Exemplu: Dacă programul citește la intrare 1 1
25 5 3 18 5 0 4, atunci afișează perechile (3,4) (4,3) (0,5) (5,0), nu neapărat în această ordine. (b) Dacă
secvența s citită la intrare este formată din numere în ordine crescătoare, să se scrie un program cât mai
eficient care afișează numărul de perechi (x, y) cu proprietatea de la punctul (a). Să se calculeze
complexitatea timp a soluției prezentate. Exemplu: Dacă programul citește la intrare 1 1 25 5 0 3 4 5 18,
atunci afișează 4.
25. Pentru un vector v sortat crescător numim vkp permutarea circulară cu k poziții spre dreapta a acestuia.
Exemplu: dacă v=,1,2,3,4,5- și k=2, atunci vkp={4,5,1,2,3}. Dându-se vkp să se determine k.
Exemplu: dacă vkp={4,5,1,2,3}, atunci k=2
26. Sortați crescător un vector, sortat inițial crescător și căruia i-a fost aplicată o funcție de gradul al II-lea
f(x)=ax2+bx+c. Exemplu: v={-1, 0, 1, 2, 3, 4}, A = -1, B = 2, C = -1, atunci vectorul rezultat este: {-9, -4, -4, -1,
-1, 0}
27. Dându-se un vector și un interval [a,b], să se împartă v în 3 părți a. î. orice elem din I să fie<a, orice elem
din II să€*a,b+ și orice elem din III să fie>b. (O(n))
28. Să se scrie n, dacă se poate, ca produs de k numere, k>1.
Exemplu: n=54, k=3→ 2 3 9, iar pentru n=100, k=5→ -1
29. Să se afișeze numărul de subșiruri strict crescătoare din vectorul v.
Exemplu: n=5, v=,1,2,3,4,2-→17
30. Să se numere secvențele de sumă>S, unde v și S sunt naturale nenule.
Exemplu: v=,1,2,3,4,5,2-, S=14→3 (,1,2,3,4,5-, {1,2,3,4,5,2}, {2,3,4,5,2})

Page | 7

S-ar putea să vă placă și