python转c,需要耐心的高瘦

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次就够了