Cum funcționează
Căutarea în sine e banală — parcurgi și compari. Partea care se greșește e numerotarea
pozițiilor.
În C++ indicii unui vector încep de la 0, dar enunțul numără pozițiile de la 1: valoarea 14
se află pe pozițiile 1 și 3, deși în memorie stă la indicii 0 și 2. De aceea se afișează i + 1,
nu i. Verifică întotdeauna exemplul din enunț ca să vezi de la ce numără — e o sursă frecventă de
puncte pierdute.
A doua subtilitate: enunțul cere toate pozițiile, deci nu există break. Bucla merge până la
capăt, spre deosebire de problemele care cer doar prima apariție.
Antetul pozitii: trebuie afișat o singură dată, dar numai dacă există măcar un rezultat. Trucul
e să-l scrii la prima potrivire, folosind chiar flagul gasit, care în acel moment e încă
false. Astfel, același flag rezolvă două probleme: ce antet să afișezi și dacă la final trebuie
scris NU EXISTA.
Pentru X = [14, 48, 14, 200, 6, 763, 50] și a = 14, potrivirile apar la i = 0 și i = 2,
deci se afișează 1 și 3.
Greșeli frecvente
- Afișarea lui
i în loc de i + 1 — toate pozițiile ies cu unu mai mici decât cele cerute.
break după prima potrivire — se pierd restul aparițiilor, deși enunțul le cere pe toate.
- Afișarea antetului
pozitii: înainte de buclă — apare și când valoarea nu există, chiar lângă
mesajul NU EXISTA.
int în loc de double — enunțul spune numere reale.
- Confuzia dintre valoare și indice — se afișează
x[i] (care e mereu egal cu a) în loc de
poziție.