第2,6,7个点过不了,有点找不到问题了
查看原帖
第2,6,7个点过不了,有点找不到问题了
921227
Jamison_Tam楼主2023/1/14 00:40
#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
#include <sstream>
#include<algorithm>
bool turn90(int n,char s[20][20],char e[20][20])
{
    char m[20][20];
    int x = n , y = 1;
    for (int i = 1; i <= n; i++)
    {
        x = n ;
        for (int j = 1; j <= n; j++)
        {
            m[i][j] = s[x--][y];
        }
        y++;
    }
    int sum = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            if (m[i][j] == e[i][j])
                sum++;
    if (sum == n * n)
        return true;
    else
        return false;
}
bool turn180(int n, char s[20][20], char e[20][20]) {
    char m[20][20];
    int x = n, y = n;
    for (int i = 1; i <= n; i++){
        y = n;
        for (int j = 1; j <= n; j++){
            m[i][j] = s[x][y--];
        }
        x--;
    }
    int sum = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            if (m[i][j] == e[i][j])
                sum++;
    if (sum == n * n)
        return true;
    else
        return false;
}
bool turn270(int n, char s[20][20], char e[20][20]) {
    char m[20][20];
    int x = 1, y = n;
    for (int i = 1; i <= n; i++) {
        x = 1;
        for (int j = 1; j <= n; j++) {
            m[i][j] = s[x++][y];
        }
        y--;
    }
    int sum = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            if (m[i][j] == e[i][j])
                sum++;
    if (sum == n * n)
        return true;
    else
        return false;
}
bool mirror(int n, char s[20][20], char e[20][20]) {
    char m[20][20];
    char mm[20][20];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            m[i][j] = s[i][j];
            mm[i][j] = s[i][j];
        }
        for (int i = 1; i <= n; i++)
        {
            int p = n;
            for (int j = 1; j <= n / 2; j++)
            {
                m[i][p] = m[i][j];
                mm[i][j] = mm[i][p];
                p--;
            }
        }
        int sum = 0;
        int sum1 = 0;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
            {
                if (m[i][j] == e[i][j])
                    sum++;
                if (mm[i][j] == e[i][j])
                    sum1++;
            }
        /*
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
                std::cout << m[i][j];
            std::cout << "\n";
        }
        */
        if ((sum == n * n) || (sum1 == n * n))
            return true;
        else
            return false;
}
bool mix(int n, char s[20][20], char e[20][20]) {
    char m[20][20];
    char mm[20][20];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            m[i][j] = s[i][j];
            mm[i][j] = s[i][j];
        }
    for (int i = 1; i <= n; i++)
    {
        int p = n;
        for (int j = 1; j <= n / 2; j++)
        {
            m[i][j] = m[i][p];
            mm[i][p] = mm[i][j];
            p--;
        }
    }
    bool sign = (turn90(n, m, e) || turn180(n, m, e) || turn270(n, m, e));
    bool sign1 = (turn90(n, mm, e) || turn180(n, mm, e) || turn270(n, mm, e));
    return (sign||sign1);
}
bool nochange(int n, char s[20][20], char e[20][20]) {
    int sum = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            if (s[i][j] == e[i][j])
                sum++;
    if (sum == n * n)
        return true;
    else
        return false;
}
int main() {
    int n;
    char s[20][20];
    char e[20][20];
    std::cin >> n;
    std::string ss;
    for (int i = 0; i < n; i++)
    {
        std::cin >> ss;
        for (int j = 0; j < n; j++)
            s[i + 1][j + 1]=ss[j];
    }
    for (int i = 0; i < n; i++)
    {
        std::cin >> ss;
        for (int j = 0; j < n; j++)
            e[i + 1][j + 1] = ss[j];
    }
    if (turn90(n,s,e)) {
        std::cout << 1;
        return 0;
    }
    if (turn180(n, s, e)) {
        std::cout << 2;
        return 0;
    }
    if (turn270(n, s, e)) {
        std::cout << 3;
        return 0;
    }
    if (mirror(n, s, e)) {
        std::cout << 4;
        return 0;
    }
    if (mix(n, s, e)) {
        std::cout << 5;
        return 0;
    }
    if (nochange(n, s, e)) {
        std::cout << 6;
        return 0;
    }
    std::cout << 7;
    return 0;
}
2023/1/14 00:40
加载中...