这题就是个模拟- -。把题目中的七种转换方式模拟出来,判断是否相等就可以了。。细心点就不会错的。。

#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;
}

发表评论

电子邮件地址不会被公开。

Post Navigation