提交时间:2024-01-23 16:12:24
运行 ID: 124936
#include<iostream> #include<algorithm> using namespace std; //区间:n<=10 int n, a[12][12], b[12][12], cmp[12][12] = { 0 }, temp[12][12] = { 0 }; char c[12][12]; bool isEqual(int a[][12],int b[][12])//判断矩阵是否相等 { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (a[i][j] != b[i][j])return false; return true; } void printSq(int a[][12])//打印矩阵 { for(int i=1;i<=n;i++) { for (int j = 1; j <= n; j++)cout << a[i][j]; cout << endl; } } void Trans1(int a[][12])//顺时针转90° { if (n % 2 == 1)cmp[n / 2 + 1][n / 2 + 1] = a[n / 2 + 1][n / 2 + 1];//特判n为奇数,最中间的数需要先进行赋值 for(int k=0;k<=n/2-1;k++)//层数,最外层记k=0,次外层k=1,以此类推,从最外层开始向内 for(int i=1;i<=n-1-2*k;i++) //该层需要循环的方块数(例如4x4矩阵,最外层需要循环3x4=12个,第二层需要1x4=4个) { cmp[i+k][n-k] = a[1][i]; cmp[n-i+1-k][1+k] = a[n-k][n-i+1-k]; cmp[1+k][i+k] = a[n-i+1-k][1+k]; cmp[n-k][n-i+1-k] = a[i+k][n-k]; } //printSq(cmp); } void Trans2(int a[][12])//顺时针转180° { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) cmp[i][j] = a[n + 1 - i][n + 1 - j]; //printSq(cmp); } void Trans3(int a[][12])//顺时针转270° { if (n % 2 == 1)cmp[n / 2 + 1][n / 2 + 1] = a[n / 2 + 1][n / 2 + 1];//特判n为奇数,最中间的数需要先进行赋值 for (int k = 0; k <= n / 2 - 1; k++)//层数,最外层记k=0,次外层k=1,以此类推,从最外层开始向内 for (int i = 1; i <= n - 1 - 2 * k; i++) //该层需要循环的方块数(例如4x4矩阵,最外层需要循环3x4=12个,第二层需要1x4=4个) { cmp[n + 1 - i - k][1 + k] = a[1][i]; cmp[i + k][n - k] = a[n - k][n - i + 1 - k]; cmp[n - k][n + 1 - i - k] = a[n - i + 1 - k][1 + k]; cmp[1 + k][i + k] = a[i + k][n - k]; } //printSq(cmp); } void Trans4(int a[][12])//水平镜像 { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) temp[i][j] = a[i][n + 1 - j]; //printSq(temp); } int main() { cin >> n; //字符阵转数字阵 @为0 -为1 for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin >> c[i][j]; switch (c[i][j]) { case '@': a[i][j] = 0; break; case '-': a[i][j] = 1; break; default: break; } } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> c[i][j]; switch (c[i][j]) { case '@': b[i][j] = 0; break; case '-': b[i][j] = 1; break; default: break; } } } Trans1(a); if (isEqual(b, cmp)) { cout << 1 << endl; return 0; } Trans2(a); if (isEqual(b, cmp)) { cout << 2 << endl; return 0; } Trans3(a); if (isEqual(b, cmp)) { cout << 3 << endl; return 0; } Trans4(a); if (isEqual(b, temp)) { cout << 4 << endl; return 0; } Trans1(temp); if (isEqual(b, cmp)) { cout << 5 << endl; return 0; } Trans2(temp); if (isEqual(b, cmp)) { cout << 5 << endl; return 0; } Trans3(temp); if (isEqual(b, cmp)) { cout << 5 << endl; return 0; } if (isEqual(b, a)) { cout << 6 << endl; return 0; } cout << 7 << endl; return 0; }