def rotate(m, n, k):
if k == 0: return m
res = []
for i in range(n):
a = ''
if k == 2:
a = m[n-i-1][::-1]
else:
for j in range(n):
if k == 1:
a += m[j][n-i-1]
else:
a += m[n-j-1][i]
res.append(a)
return res
T = int(input())
res = []
for i in range(T):
n, k = map(int, (input().split()))
m = []
for j in range(n):
m.append(input())
res.append(rotate(m, n, k%4))
for i in res:
for j in i:
print(j)
题目链接:
http://t.csdn.cn/XVfZm?spm=1005.2026.3001.5622
供参考:
#include <stdio.h>
#include <stdlib.h>
void rotate(char* x, int n, int k){
char* y = (char*)malloc(sizeof(char)*n*n);
for(int i=0; i < n * n; i++)
y[n * n - (i % n)* n - n + i/n] = x[i];
for(int i=0; i < n * n; i++)
x[i] = y[i];
free(y);
k--;
if (k > 0) rotate(x, n, k);
}
int main() {
int T, n, k, i;
scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &k);
char *a = (char*)malloc(sizeof(char)*n*n);
for (i = 0;i < n * n; i++)
scanf(" %c", &a[i]);
rotate(a, n, k % 4);
for (i = 0; i < n * n; i++){
printf("%c", a[i]);
if ((i+1) % n == 0)
printf("\n");
}
free(a);
}
return 0;
}
逆时针旋转4次又转回来了,因此旋转k%4次就够了