这题就是个模拟- -。把题目中的七种转换方式模拟出来,判断是否相等就可以了。。细心点就不会错的。。
#include <iostream> #include <algorithm> #include <map> #include <string> #include <cstdio> #include <cstring> #include <stdlib.h> using namespace std; const int INF = 0x7f7f7f7f; int n; bool judge(char s[][20],char ans[][20]) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) if(s[i][j]!=ans[i][j]) return 0; } return 1; } int main() { int i,j; char ans[20][20],s[20][20],str[20][20],t[20][20]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%s",s[i]); for(i=0;i<n;i++) scanf("%s",ans[i]); for(i=0;i<n;i++) for(j=0;j<n;j++) str[i][j]=s[n-1-j][i];//90 if(judge(str,ans)) { printf("%d\n",1);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=str[n-1-j][i];//180 if(judge(t,ans)) { printf("%d\n",2);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) str[i][j]=t[n-1-j][i];//270 if(judge(str,ans)) { printf("%d\n",3);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) str[i][j]=s[i][n-1-j];//flip if(judge(str,ans)) { printf("%d\n",4);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=str[n-1-j][i]; if(judge(t,ans)) { printf("%d\n",5);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=str[n-1-i][n-1-j]; if(judge(t,ans)) { printf("%d\n",5);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=str[j][n-1-i]; if(judge(t,ans)) { printf("%d\n",5);return 0;} for(i=0;i<n;i++) for(j=0;j<n;j++) t[i][j]=str[n-1-j][i]; if(judge(s,ans)) { printf("%d\n",6);return 0;} printf("%d\n",7); return 0; }