这道题用模拟的方法。
做题时有一些小细节需要注意,可以优化代码。
首先判断6这种情况,然后再依次判断1-5的情况,其中2,3种情况建立在第1种情况上。
具体代码如下:
/*
ID:m1519591
PROG: transform
LANG:C++
*/
#include<iostream>
#include<fstream>
using namespace std;
const int size = 11;
char st[size][size];
char en[size][size];
int ans=7;
int n;
void Deg90()
{
char tmp[size][size];
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n-1;j++)
tmp[j][n-i-1]=st[i][j];
}
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n-1;j++)
st[i][j]=tmp[i][j];
}
}
void Ref()
{
char tmp[size][size];
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n-1;j++)
tmp[i][n-j-1]=st[i][j];
}
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n-1;j++)
st[i][j]=tmp[i][j];
}
}
void Comp(int x)
{
bool flag =true;
for(int i=0;i<=n-1;i++)
{
for(int j=0;j<=n-1;j++)
{
if(st[i][j]!=en[i][j])
{
flag=false;
break;
}
}
}
if(flag)
ans=min(ans,x);
}
int main()
{
ofstream cout("transform.out");
ifstream cin("transform.in");
cin>>n;
for(int i=0;i<=n-1;i++)
cin>>st[i];
for(int i=0;i<=n-1;i++)
cin>>en[i];
Comp(6);
Deg90();
Comp(1);
if(ans==1)
cout<<ans<<endl;
else
{
Deg90();
Comp(2);
if(ans==2)
cout<<ans<<endl;
else
{
Deg90();
Comp(3);
if(ans==3)
cout<<ans<<endl;
else{
Deg90();
Ref();
Comp(4);
if(ans==4)
cout<<ans<<endl;
else
{
for(int i=0;i<=2;i++)
{
Deg90();
Comp(5);
if(ans==5)
{
cout<<ans<<endl;
break;
}
}
if(ans!=5)
cout<<ans<<endl;
}
}
}
}
return 0;
}