Cum funcționează
Tentația e să construiești matricea cu un contor care crește la fiecare pas. Merge, dar te obligă
să reții o variabilă în plus și să nimerești ordinea corectă de parcurgere. Mai simplu e să
calculezi direct valoarea din poziție — fără contor, fără matrice în memorie.
Citește cu atenție exemplul: multiplii nu merg pe linii, ci pe coloane. Prima coloană e
3, 6, 9, a doua 12, 15, 18, a treia 21, 24, 27. Deci al câtelea multiplu stă la poziția
(i, j) se află numărând întâi coloanele întregi de dinainte:
ordinea multiplului la (i, j) = j * n + i + 1
valoarea = n * (j * n + i + 1)
Verificare pe n = 3, poziția (0, 1) — linia 0, coloana 1:
1 * 3 + 0 + 1 = 4, deci al 4-lea multiplu al lui 3, adică 12. Exact ce arată modelul.
+ 1 e acolo pentru că indicii încep de la 0, dar multiplii încep de la primul, nu de la al
zero-lea. Dacă îl uiți, prima celulă iese 0 în loc de n.
Matricea nu se stochează deloc: se afișează direct în timpul celor două bucle. Pentru o problemă de
construcție în care fiecare element depinde doar de poziția lui, ăsta e tiparul cel mai scurt și
cel mai greu de greșit.
Greșeli frecvente
- Completarea pe linii (
n * (i * n + j + 1)) — dă matricea transpusă: 3 6 9 pe prima linie.
Modelul din enunț e singurul care spune în ce sens se umple; citește-l înainte să scrii formula.
- Uitarea lui
+ 1 — matricea începe cu 0, iar ultimul multiplu lipsește.
- Declararea unei matrice
int a[n][n]; cu n citit de la tastatură — nu e C++ standard. Aici
nici nu e nevoie de matrice, dar unde e, dimensiunea se ia din limita enunțului (a[20][20]).
- Afișarea fără
"\n" la finalul liniei — totul iese pe un singur rând și nu se mai vede
structura de matrice.