求解决f,这是什么问题啊,错了两个2和7
查看原帖
求解决f,这是什么问题啊,错了两个2和7
1406815
xiaobu321楼主2024/10/31 15:31
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        char[][] startArray = new char[n][n];
        char[][] endArray = new char[n][n];
        for (int i = 0; i < n; i++) {
            String s = scanner.next();
            startArray[i] = s.toCharArray();
        }
        for (int i = 0; i < n; i++) {
            String s = scanner.next();
            endArray[i] = s.toCharArray();
        }
        System.out.println(getType(startArray, endArray, n));

    }

    public static int getType(char[][] startArray, char[][] endArray,int n){
        //这里需要深拷贝一下,否则会修改原数组
        char[][] start = Arrays.copyOf(startArray, n);
        if (revolve90(startArray, endArray,n)) {
            return 1;
        }

        if (revolve180(startArray, endArray,n)){
            return 2;
        }

        if (revolve270(startArray, endArray,n)){
            return 3;
        }

        if (revolvePerpendicular(startArray, endArray,n)) {
            return 4;
        }
        char[][] tempArray=startArray;
        horizontalReversal(tempArray,n);
        if (revolve90(tempArray, endArray,n)||revolve180(tempArray, endArray,n)||revolve270(tempArray, endArray,n)){
            return 5;
        }

        if (isSame(start,endArray,n)){
            return 6;
        }
        return 7;
    }

    public static void horizontalReversal(char[][] tempArray,int n){
        int i=0;
        while (i<n/2){
            char[] temp=tempArray[i];
            tempArray[i]=tempArray[n-1-i];
            tempArray[n-1-i]=temp;
            i++;
        }
    }

    //水平反转(中央垂线)
    public static boolean revolvePerpendicular(char[][] startArray, char[][] endArray,int n){
        char[][] revolve = Arrays.copyOf(startArray, n);
        for (int i = 0; i < n; i++) {
            int j=0;
            while (j<revolve[i].length/2){
                char temp=revolve[i][j];
                revolve[i][j]=revolve[i][n-1-j];
                revolve[i][n-1-j]=temp;
                j++;
            }
        }
        return isSame(revolve,endArray,n);
    }




    //旋转270度
    public static boolean revolve270(char[][] startArray, char[][] endArray,int n){
        char[][] temp=new char[n][n];
        int x=0,y=0;
        for (int j = n-1; j >=0 ; j--) {
            for (int i = 0; i < n ; i++) {
                temp[x][y]=startArray[i][j];
                y++;
                if (y>=n){
                    y=0;
                    x++;
                }
            }
        }
        return isSame(temp,endArray,n);
    }


    //旋转180度
    public static boolean revolve180(char[][] startArray, char[][] endArray,int n){
        char[][] temp=new char[n][n];
        int x=0,y=0;
        for (int i = n-1; i >= 0; i--) {
            for (int j = n-1; j  >= 0; j--) {
                temp[x][y]=startArray[i][j];
                y++;
                if (y>=n){
                    y=0;
                    x++;
                }
            }
        }
        return isSame(temp,endArray,n);
    }


    //旋转90度
    public static boolean revolve90(char[][] startArray, char[][] endArray,int n){
        char[][] temp=new char[n][n];
        int x=0,y=0;
        //顺时针旋转90度
        for (int i = 0; i < n ; i++) {
            for (int j = n-1; j >=0 ; j--) {
                temp[x][y]=startArray[j][i];
                y++;
                if (y>=n){
                    y=0;
                    x++;
                }
            }
        }
        return isSame(temp,endArray,n);
    }

    public static void print(char[][] temp){
        for (int i = 0; i < temp.length; i++) {
            for (int j = 0; j < temp[i].length; j++) {
                System.out.print(temp[i][j]+" ");
            }
            System.out.println();
        }
    }

    //判断是否相同
    public static boolean isSame(char[][] tempArray, char[][] endArray,int n) {
        boolean flag = true;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (tempArray[i][j]!= endArray[i][j]){
                    flag=false;
                }
            }
        }
        return flag;
    }



}

2024/10/31 15:31
加载中...