Problem1359--方阵顺时针旋转

1359: 方阵顺时针旋转

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 13  Solved: 0
[Submit] [Status] [Web Board] [Creator:]

Description

对一个方阵转置,就是把原来的行号变列号,原来的列号变行号
 
    例如,如下的方阵:
 
 1 2 3 4
 5 6 7 8
 9 10 11 12
13 14 15 16
 
    转置后变为:
 
 1 5 9 13
 2 6 10 14
 3 7 11 15
 4 8 12 16
 
    但,如果是对该方阵顺时针旋转(不是转置),却是如下结果:
 
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
 
    下面的代码实现的功能就是要把一个方阵顺时针旋转。
 
void rotate(int* x, int rank)
{
       int* y = (int*)malloc(__________________); // 填空
 
       for(int i=0; i<rank * rank; i++)
       {
              y[_                               ] = x[i]; // 填空
       }
 
       for(i=0; i<rank*rank; i++)
       {
              x[i] = y[i];
       }
 
       free(y);
}
 
int main(int argc, char* argv[])
{
       int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
       int rank = 4;
 
       rotate(&x[0][0], rank);
 
       for(int i=0; i<rank; i++)
       {
              for(int j=0; j<rank; j++)
              {
                     printf("%4d", x[i][j]);
              }
              printf("\n");
       }
 
       return 0;
}
 

Sample Input

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Sample Output

13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4

Source/Category