刚开始一看题目, 看起来很难的样子, 于是就先放过了;等我把其他题做完后, 我仔细看了下题目, 才发现, 这个题目原来这嘛水 ……
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int n;
void Spin( char map[][11], char str[][11], int num)//旋转90度
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
str[j][n-1-i]=map[i][j];
}
}
void Turn(char map[][11], char str[][11])//水平翻转
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
str[i][n-1-j]=map[i][j];
}
}
bool Judge(char aim[][11], char str[][11])//判断是否相等, 相等返回0,否则返回1
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
if( aim[i][j]!=str[i][j])
return 1;
}
return 0;
}
int main()
{
ifstream fin("transform.in");
ofstream fout("transform.out");
char map[11][11], aim[11][11], str1[11][11], str2[11][11], str3[11][11], str4[11][11];
int flag=1, i, ans;
fin>>n;
for(i=0; i<n; i++)
// cin>>map[i];
fin>>map[i];
for(i=0; i<n; i++)
//cin>>aim[i];
fin>>aim[i];
Spin(map, str1);//旋转90度
flag=Judge(aim, str1);
if( flag==0 ) ans=1;
else
{
Spin( str1, str2);//再旋转90度
flag=Judge(aim, str2);
if( flag==0 ) ans=2;
else
{
Spin(str2, str3);//再旋转90度
flag=Judge(aim, str3);
if( flag==0 ) ans=3;
else
{
Turn( map, str4 );//水平翻转
flag=Judge(aim, str4);
if( flag==0 ) ans=4;
else
{
Spin(str4, str1);//旋转90度
flag=Judge(aim, str1);
if( flag==0 ) ans=5;
else
{
Spin(str1, str2);//再旋转90度
flag=Judge(aim, str2);
if( flag==0 ) ans=5;
else
{
Spin(str2, str3);//再旋转90度
flag=Judge(aim, str3);
if( flag==0 ) ans=5;
else
{
if( Judge(aim, map)==0 )
ans=6;
else
ans=7;
}
}
}
}
}
}
}
//cout<<ans<<endl;
fout<<ans<<endl;
}