Liniile unei matrice cu elemente în ordine strict crescătoare
Enunț
Se citește o matrice pătratică cu n linii și n coloane (n ≤ 100), cu elemente numere naturale
din intervalul [0, 1000]. Afișați liniile care au elementele în ordine strict crescătoare.
Rezolvare
#include <iostream>
using namespace std;
int a[105][105];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
for (int i = 0; i < n; i++) {
bool crescator = true;
for (int j = 1; j < n; j++)
if (a[i][j] <= a[i][j - 1]) { crescator = false; break; }
if (crescator) {
for (int j = 0; j < n; j++) cout << a[i][j] << " ";
cout << "\n";
}
}
return 0;
}Cum funcționează
Problema e o verificare de proprietate pe fiecare linie, iar tiparul se repetă la zeci de subiecte: pentru fiecare linie, presupui că proprietatea e adevărată, o cauți pe prima dovadă contrară, și decizi la final.
pentru fiecare linie i:
crescator = true
pentru fiecare pereche vecina:
daca ordinea e gresita: crescator = false, iesi din bucla
daca crescator: afiseaza linia
Variabila crescator se numește flag (steag): pornește cu valoarea optimistă și se „coboară"
la primul contraexemplu. E mai sigur decât să încerci să numeri perechile corecte, pentru că nu
trebuie să te întrebi câte ar trebui să fie.
Două detalii care contează:
- bucla de verificare pornește de la
j = 1, nu de la0, pentru că se comparăa[i][j]cu vecinul din stânga. Dacă pornești de la0,a[i][-1]e în afara vectorului; - strict crescător înseamnă
<=în testul de eșec. Dacă enunțul ar fi cerut doar „crescător", valorile egale ar fi fost acceptate, iar testul ar fi fost<. Un singur caracter diferență, iar subiectele conțin dinadins linii cu două valori egale ca să-l prindă.
break nu e obligatoriu, dar oprește căutarea după prima dovadă — o linie de 100 de elemente care
scade de la primul pas nu mai trebuie parcursă până la capăt.
Greșeli frecvente
<în loc de<=în testul de eșec — liniile cu elemente egale alăturate (3 5 5 7) sunt raportate greșit ca strict crescătoare.- Uitarea resetării flag-ului — dacă
bool crescator = true;e declarat înaintea buclei pei, prima linie care eșuează blochează tot restul. - Pornirea comparației de la
j = 0— citire în afara matricei; programul poate merge corect pe calculatorul tău și greșit pe altul. - Afișarea indicelui liniei în loc de linie — enunțul cere „liniile", adică elementele lor.
Apariții
- Galati 2026 — problema 35 · sursa oficială
Sursa fișei: atestia.ro/subiecte/programare/linii-strict-crescatoare — subiecte de atestat la informatică, cu rezolvări explicate.