魔法少女

这道题的关键在于如何逆时针旋转和顺时针旋转,我们可以每次旋转一行,比如顺时针旋转,第一行会旋转到第三列,第二行会旋转到第二列,第三行会旋转到第一列,依次
代码如下:
#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"); } }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号