URGENT!!! CU RECURSIVITATE!!! PLS!!!
George, mare pasionat de artă, a primit un desen și acum încearcă să descifreze tainele acestuia. Pe scurt, îl tot rotește spre dreapta și spre stânga pentru a încerca să îl vizualizeze mai bine. Sătul să îl mai privească, Jon, prietenul său la fel de pasionat de artă, ii spune că pentru a descifra tabloul, trebuie să îl rotească spre stânga cu 90 de grade de k ori.
Neînțelegând indicațiile primite, George vă cere vouă ajutorul. Ca să îi vii în ajutor, scrie o funcție ce rotește un tablou bidimensional (matrice) cu 90o la stânga de k ori.
Restricții și precizări
Numele funcției este rotireMatStg
Funcția va avea 4 parametri: n și m, de tip int, semnificând numărul de linii, respectiv coloane ale matricei; a, reprezentând tabloul bidimensional și k, un număr întreg cu semnificația din enunț
Primii doi parametri(n și m) sunt și parametri de ieșire, deoarece întorc noua dimensiune a tabloului
Matricea finală va fi întoarsă prin intermediul parametrului ce memorează matricea inițială
1 ≤ n, m < 1 000
1 ≤ k ≤ 1 000 000
Elementele matricei vor fi numere naturale mai mici decât 1 000 000
Pentru ca programul să funcționeze fără erori, matricea trebuie să fie de 1 000 x 1 000 și indexată de la 1:
void rotireMatStg(int &n, int &m, int a[1000][1000], int k)
Dacă ai nevoie de matrice în plus, declară-le înainte să declari funcția.
Răspunsuri la întrebare
Salut!
Ai functia mai jos in C++
int b[1000][1000];
void rotireMatStg(int &n, int &m, int a[1000][1000], int k) {
if (k % 4 == 0 || k == 0) {
return;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
b[m+1-j][i] = a[i][j];
}
}
swap(n, m);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
a[i][j] = b[i][j];
}
}
rotireMatStg(n, m, a, k - 1);
}
Explicatie:
Daca k = 4 sau se imparte exact la 4, inseamna ca facem unul sau mai multe cercuri complete (360°), asadar nu este nevoie intoarcerea matricei. In cazul cand k = 0, inseamna ca am efectuat toate rotirile, deoarece in apelul recursiv ii dam k-1.
Pentru ca in final sa avem n si m schimbate, folosim functia swap(n, m) care va interschimba valoarea celor 2 variabile la fiecare rotire inainte de copiere in matricea originala.