#13163. 珅泽教育CSP-J第一轮模拟考第三十套 第 20 题
珅泽教育CSP-J第一轮模拟考第三十套 第 20 题
二、程序阅读题(每个小题单独作答,共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 列为中心的( )阶方阵。
{{ select(1) }}
2r+12r-12rr