#include <iomanip>
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
//#define PI 3.1415926
char a[20][20];
char b[20][20];
char c[20][20];
//int hang,lie;
int xuanzhuan90(char a[20][20],int n,int hang)//旋转90°
{
int lie = 0;
for(int i = 0;i < n;i++)
{
hang = n-1;
for(int j = 0;j < n;j++)
{
c[i][j] = a[hang--][lie];
}
lie++;
}
}
int xuanzhuan180(char a[20][20],int n,int hang)//旋转180°
{
int lie = n-1;
hang = n-1;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
c[i][j] = a[hang][lie--];
}
lie = n-1;
hang--;
}
}
int xuanzhuan270(char a[20][20],int n,int hang)//旋转270°
{
int lie = n-1;
hang = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
c[i][j] = a[hang++][lie];
}
lie --;
hang = 0;
}
}
int jingxiang(char a[20][20],int n,int hang)//水平翻转
{
int lie = n-1;
hang = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
c[i][j] = a[hang][lie--];
}
lie = n-1;
hang++;
}
}
int main()
{
int n,flag = 0;
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++)
{
cin >> b[i][j];
}
}
for(int i = 1;i <= 7;i++)//选择是那种方式
{
flag = 0;
if(i == 1)
{
xuanzhuan90(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 1;return 0;}//使用标志位判断是否两数组完全一样
continue;
}
else if(i == 2)
{
xuanzhuan180(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 2;return 0;}
continue;
}
else if(i == 3)
{
xuanzhuan270(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 3;return 0;}
continue;
}
else if(i == 4)
{
jingxiang(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 4;return 0;}
continue;
}
else if(i == 5)
{
int i51 = 1;
for(int i = i51;i <= 3;i++)
{
flag = 0;
if(i == 1)
{
jingxiang(a,n,n);
xuanzhuan90(a,n,n);//疑惑的点之一我感觉这个函数的形参应该放(c, n,n)因为我上面那个函数变换之后将变换后的a存储到c中第二步应该继续对c变换,但我输出c发现完全不对,只好又输入了a数组
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 5;return 0;}
}
else if(i == 2)
{
jingxiang(a,n,n);
xuanzhuan180(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 5;return 0;}
}
else if(i == 3)
{
jingxiang(a,n,n);
xuanzhuan270(a,n,n);
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != c[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 5;return 0;}
}
}
continue;
}
else if(i == 6)//不变换
{
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(b[i][j] != a[i][j]) flag = 1;
}
}
if(flag == 0) {cout << 6;return 0;}
continue;
}
else//无解
{
cout << 7;
return 0;
}
}
return 0;
}
我疑惑的点主要有以下两个一个是我感觉第二个测试点结果无法做到输出5,第二个疑惑的点是第153行代码我感觉应该在函数内放数组c不应该放数组a但放入c后完全不对,不知道有没有大佬能解释一下。我尝试在第二个测试点的数据中,将变形完后的c数组输出发现并不能得到正确变换。