求问,代码哪里有问题
查看原帖
求问,代码哪里有问题
1373219
acommonman楼主2024/11/7 08:50
#include<bits/stdc++.h>
using namespace std;
int n;
char a[12][12],b[12][12],A[12][12];
char c[12][12],d[12][12],e[12][12];//90,180,270
bool turn_1(){//90°
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            c[j][n-i+1]=a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(c[i][j]!=b[i][j])
                return false;
    return true;
}

bool turn_2(){//180
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            d[n-i+1][n-j+1]=a[i][j];
        }
    }

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(d[i][j]!=b[i][j])
                return false;
    return true;
}

bool turn_3(){//270
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            e[n-j+1][i]=a[i][j];
        }
    }

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(e[i][j]!=b[i][j])
                return false;
    return true;
}

bool ref(){//reflection,这一步可以修改a数组
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n/2;j++)swap(a[i][j],a[i][n-j+1]);//反转

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(a[i][j]!=b[i][j])
                return false;
    return true;
}

bool zuhe(){//调用zuhe之前,已经调用了ref,所以不用再水平翻转
    if(turn_1())return true;
    if(turn_2())return true;
    if(turn_3())return true;
    return false;
}

bool flg=true;//记录方式6

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)scanf("%c",&a[i][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            scanf("%c",&b[i][j]);
            if(b[i][j]!=a[i][j])flg=false;}    

    if(turn_1()){printf("1");return 0;}
    if(turn_2()){printf("2");return 0;}
    if(turn_3()){printf("3");return 0;}
    if(ref()){printf("4");return 0;}
    if(zuhe()){printf("5");return 0;}
    if(flg){printf("6");return 0;}
    printf("7");
}
2024/11/7 08:50
加载中...