Cum funcționează
E tiparul clasic de minim/maxim cu reținerea poziției, aplicat de două ori în aceeași parcurgere.
Partea care se greșește cel mai des e inițializarea. Mulți pornesc cu vmin = 0 sau cu o
valoare „foarte mare" scrisă din burtă. Ambele sunt fragile: enunțul spune „elemente întregi", deci
pot fi negative, iar un vmin = 0 n-ar fi niciodată depășit de un minim pozitiv.
Soluția sigură: pornește de la un element care există efectiv în matrice — a[0][0]. Atunci
minimul nu poate fi mai mic decât ceva care nu e acolo, iar maximul nu poate fi umflat artificial.
Poziția se actualizează în același if cu valoarea. Dacă o actualizezi separat, se
desincronizează la prima comparație pe care o ratezi.
La afișare se adună 1, pentru că indicii din C++ încep de la 0, iar enunțul numerotează de la
1. Verifică pe exemplu: minimul 2 e pe linia cu indice 2, adică linia 3 în numerotarea
cerută.
Enunțul precizează că elementele sunt distincte, ceea ce elimină întrebarea „ce fac la
egalitate?". Dacă n-ar fi precizat, ar fi trebuit să decizi dacă păstrezi prima sau ultima apariție
— iar subiectele care omit precizarea asta sunt exact cele care te prind.
Greșeli frecvente
int vmin = 0; — cu toate elementele pozitive, minimul raportat rămâne 0, valoare care nu
există în matrice.
int vmax = 0; pe o matrice cu toate elementele negative — aceeași problemă, în oglindă.
- Afișarea indicelui fără
+ 1 — rezultat deplasat cu o poziție față de ce cere enunțul.
- Reținerea coloanei la minim și a liniei la maxim — enunțul cere invers; se citește cu atenție,
e o inversare ușor de făcut și imposibil de observat la recitire rapidă.