#13164. 珅泽教育CSP-J第一轮模拟考第三十套 第 21 题

珅泽教育CSP-J第一轮模拟考第三十套 第 21 题

二、程序阅读题(每个小题单独作答,共40分)

程序阅读(1):方阵旋转

输入的 n,m 均不超过500;每次操作给出中心 (a,b)、半径 r 与方向 opt

#include <cstdio>
int g[510][510], tot, f[510][510];
int main(){
    int n, m;
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            g[i][j] = ++tot;
    for (int i = 1; i <= m; i++){
        int a, b, r, opt;
        scanf("%d %d %d %d", &a, &b, &r, &opt);
        if (opt == 0){
            for (int i = a - r; i <= a + r; i++)
                for (int j = b - r; j <= b + r; j++)
                    f[a - b + j][a + b - i] = g[i][j];
            for (int i = a - r; i <= a + r; i++)
                for (int j = b - r; j <= b + r; j++)
                    g[i][j] = f[i][j];
        }
        if (opt == 1){
            for (int i = a - r; i <= a + r; i++)
                for (int j = b - r; j <= b + r; j++)
                    f[a + b - j][b - a + i] = g[i][j];
            for (int i = a - r; i <= a + r; i++)
                for (int j = b - r; j <= b + r; j++)
                    g[i][j] = f[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++)
            printf("%d ", g[i][j]);
        printf("\n");
    }
    return 0;
}

n=5,m=3,三次操作依次为 2 2 1 03 3 1 14 4 1 0 时,最终矩阵第4行是( )。

{{ select(1) }}

  • 11 6 1 4 5
  • 13 2 23 8 3
  • 16 7 24 17 18
  • 12 9 14 19 10