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

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

二、程序阅读题(每个小题单独作答,共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;
}

a=b=n/2+1,旋转会让所选奇数阶方阵的中心元素保持不动,其余元素换位。( )

{{ select(1) }}

  • 正确
  • 错误