魔法少女

 

这道题的关键在于如何逆时针旋转和顺时针旋转,我们可以每次旋转一行,比如顺时针旋转,第一行会旋转到第三列,第二行会旋转到第二列,第三行会旋转到第一列,依次

代码如下:

#include<stdio.h>
#include<math.h>
int f[1000][1000];
int g[1000][1000];

int main(void)
{
    int n, m;
    int k = 1;
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            f[i][j] = k++;
        }
    }
    int x, y, z, r;
    for (int i = 0; i < m; i++)
    {

        scanf("%d %d %d %d", &x, &y, &z, &r);
        if (r == 0)
        {
            for (int q = x - z; q <= x + z; q++)
            {
                for (int w = y - z; w <= y + z; w++)
                {
                    g[x - y + w][y + x - q] = f[q][w];
                }
            }
            for (int q = x - z; q <= x + z; q++)
            {
                for (int w = y - z; w <= y + z; w++)
                {
                    f[q][w] = g[q][w];
                }
            }
        }
        else
        {
            for (int q = x - z; q <= x + z; q++)
            {
                for (int w = y - z; w <= y + z; w++)
                {
                    g[x+y-w][y-x+q] = f[q][w];
                }
            }
            for (int q = x - z; q <= x + z; q++)
            {
                for (int w = y - z; w <= y + z; w++)
                {
                    f[q][w] = g[q][w];
                }
            }
        }
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            printf("%d ", f[i][j]);
        }
        printf("\n");
    }
}

 

posted @ 2021-01-20 21:08  loliconsk  阅读(140)  评论(0)    收藏  举报