Răspuns :
Presupunem ca matircea este indexata de la 0:
Prin rotirea cu 90 de grade in sensul acelor de ceasornic elementele din A iau urmatoarea valoare:
A[i][j] = A[n - j][i], oricare 0 ≤ i, j < n
La urmatoarea rotire cu 90 de grade(180 in total), aplicam aceeasi formula:
Daca A[x][y] = A[n - y][x], iar x = n - j si y = i, atunci:
A[n - j][i] = A[n - i][n - j]
Aplicand aceeasi regula, pentru 270 de grade va fi:
A[n - i][n - j] = A[n - (n - j)][n - i] = A[j][n - i]
A[n - i][n - j] = A[j][n - i]
Se observa ca daca mai aplicam odata formula in lant, ajungem de unde am plecat, la A[i][j]. Ceea ce este si logic deoarece rotirea cu 360 de grade este echivalenta cu rotirea cu 0 grade.
Asadar, celula A[i][j], va lua pe rand valorile de mai sus, in urma fiecarei rotiri. Ca B[i][j] sa fie 1, cel putin una din celulele corespunzatoare celor 4 matrici trebuie sa fie 1. Asta se poate scrie astfel:
daca A[i][j] = 1 sau A[n - j][i] = 1 sau A[n - i][n - j] = 1 sau A[j][n - i] = 1 atunci:
B[i][j] = 1
altfel
B[i][j] = 0
C++:
#include <iostream>
using namespace std;
int main()
{
int n;
bool a[100][100], b[100][100];
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++)
for (int j = 0; j < n; j++)
b[i][j] = a[i][j] | a[n - j][i] | a[n - i][n - j] | a[j][n - i]; /*expresia va returna 1 daca cel putin unul din cele 4 elemente este 1, altfel va returna 0*/
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << b[i][j] << ' ';
cout << '\n';
}
}
Prin rotirea cu 90 de grade in sensul acelor de ceasornic elementele din A iau urmatoarea valoare:
A[i][j] = A[n - j][i], oricare 0 ≤ i, j < n
La urmatoarea rotire cu 90 de grade(180 in total), aplicam aceeasi formula:
Daca A[x][y] = A[n - y][x], iar x = n - j si y = i, atunci:
A[n - j][i] = A[n - i][n - j]
Aplicand aceeasi regula, pentru 270 de grade va fi:
A[n - i][n - j] = A[n - (n - j)][n - i] = A[j][n - i]
A[n - i][n - j] = A[j][n - i]
Se observa ca daca mai aplicam odata formula in lant, ajungem de unde am plecat, la A[i][j]. Ceea ce este si logic deoarece rotirea cu 360 de grade este echivalenta cu rotirea cu 0 grade.
Asadar, celula A[i][j], va lua pe rand valorile de mai sus, in urma fiecarei rotiri. Ca B[i][j] sa fie 1, cel putin una din celulele corespunzatoare celor 4 matrici trebuie sa fie 1. Asta se poate scrie astfel:
daca A[i][j] = 1 sau A[n - j][i] = 1 sau A[n - i][n - j] = 1 sau A[j][n - i] = 1 atunci:
B[i][j] = 1
altfel
B[i][j] = 0
C++:
#include <iostream>
using namespace std;
int main()
{
int n;
bool a[100][100], b[100][100];
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++)
for (int j = 0; j < n; j++)
b[i][j] = a[i][j] | a[n - j][i] | a[n - i][n - j] | a[j][n - i]; /*expresia va returna 1 daca cel putin unul din cele 4 elemente este 1, altfel va returna 0*/
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << b[i][j] << ' ';
cout << '\n';
}
}