2023-05-06


package 一;

import java.util.Scanner;

public class p4924魔法少女 {

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);

        int b = s.nextInt();

        int[][] a = new int[b + 1][b + 1];

        int c = 0;

        for (int i = 1; i < b + 1; i++) {

            for (int j = 1; j < b + 1; j++) {

                a[i][j] = ++c;

            }

        }//创建二维数组对数组赋值。

        //存储操作指令。

        int[][] cz = new int[s.nextInt()][4];

        for (int i = 0; i < cz.length; i++) {

            for (int j = 0; j < 4; j++) {

                cz[i][j] = s.nextInt();

            }

        }

        //这个需要注意给的坐标不是从零开始的。

        int[][] d = new int[500][500];

        for (int i = 0; i < cz.length; i++) {

            int f = cz[i][2] * 2 + 1;

            for (int k = cz[i][0]- cz[i][2],x = 0; x < f; k++,x++) {

                for (int j = cz[i][1] - cz[i][2], y = 0; y < f; j++,y++) {

                    d[x][y] = a[k][j];

                }

            }

            //这里是来把数据提取出来。

            //找一个什么样的关系将这些数据对应上嘞

            if (cz[i][3] == 0){//顺时针旋转

                for (int k = cz[i][0]- cz[i][2],y = 0; y < f; k++,y++) {

                    for (int j = cz[i][1] - cz[i][2],x = f - 1; x >= 0; j++,x--) {

                        a[k][j] = d[x][y];

                    }

                }

            }//这里是读取数组的x 和 y改变,这就需要考虑好他们的对应关系。

            else {//逆时针旋转

                for (int k = cz[i][0]- cz[i][2],y = f - 1; y >= 0; k++,y--) {

                    for (int j = cz[i][1] - cz[i][2],x = 0; x < f; j++,x++) {

                        a[k][j] = d[x][y];

                    }

                }

            }

        }

        for (int i = 1; i < b + 1; i++) {

            for (int j = 1; j < b + 1; j++) {

                System.out.print(a[i][j] + " ");


            System.out.println();

        }

    }

}

借鉴其他同学方法,方法比较好理解,我感觉收获大的

你可能感兴趣的:(2023-05-06)