刚开始一看题目, 看起来很难的样子, 于是就先放过了;等我把其他题做完后, 我仔细看了下题目, 才发现, 这个题目原来这嘛水 ……
#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; }