Se dă o matrice mt cu n linii și m coloane. Să se rotească o submatrice pătratică dată cu 90 de grade spre stânga.
Date de intrare
De pe prima linie se citesc de la tastatură numerele n și m. De pe următoarele n linii se citesc m numere naturale care reprezintă elementele matricei. De pe ultima linie se citesc numerele i, j și l. i și j reprezintă linia și coloana colțului din stânga sus a submatricei. l reprezintă numărul de linii și de coloane al submatricei.
Date de ieșire
Programul va afișa pe ecran matricea rezultată în urma rotirii.
Restricții și precizări
1 ≤ n, m ≤ 50
1 ≤ mt[i][j] ≤ 3 000
1 ≤ i ≤ n,
1 ≤ j ≤ m
1 ≤ i + l - 1 ≤ n
1 ≤ j + l - 1 ≤ m
Liniile și coloanele matricei sunt numerotate începând de la 1
EXEMPLUL
Date de intrare
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2 2 2
Date de iesire
1 2 3 4
5 7 11 8
9 6 10 12
13 14 15 16
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int mt[51][51], aux[51][51];
//Functie pentru afisarea matricei cu n linii si m coloane
void afisare_matrice(int mat[51][51], int n, int m) {
for (int linie = 0; linie < n; ++linie) {
for (int coloana = 0; coloana < m; ++coloana) {
cout << mat[linie][coloana] << " ";
}
cout << '\n';
}
}
int main() {
int n, m, i, j, l;
cin >> n >> m;
//Citeste matrice
for (int row = 0; row < n; ++row) {
for (int column = 0; column < m; ++column) {
cin >> mt[row][column];
}
}
//Citeste poz submatr
cin >> i >> j >> l;
--i;
--j;
//Copiaza submatricea separat
for (int linie = i; linie <= i + l; ++linie) {
for (int coloana = j; coloana <= j + l; ++coloana) {
aux[linie-i][coloana-j] = mt[linie][coloana];
}
}
//Transpune submatricea
for (int linie = 0; linie < l; ++linie) {
for (int coloana = 0; coloana < linie; ++coloana) {
swap(aux[linie][coloana], aux[coloana][linie]);
}
}
//Copiaza matricea transpusa de jos in sus pe coloane in matricea originala
for (int coloana = 0; coloana < l; ++coloana) {
for (int linie = 0; linie < l; ++linie) {
mt[i + linie][j + coloana] = aux[l - linie-1][coloana];
}
}
afisare_matrice(mt, n, m);
return 0;
}
► Explicatie :
◘ Copiem submatricea separat, o rotim la 90 de grade spre stanga si apoi o lipim la loc.
◘ Putem roti o matrice la 90 de grade spre stanga astfel :
- O transpunem
- O scriem de jos in sus (Inversam prima linie cu ultima, a doua linie cu penultima, a treia cu a treia de la sfarsit, etc. )
cum pot face transpusa fara swap?