方阵顺时针旋转

2014-11-24 02:39:47 · 作者: · 浏览: 1

例如,如下的方阵:


1 2 3 4
5 6 7 8
9 10 11 12

13 14 15 16

顺时针旋转,却是如下结果:


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

[cpp]
#include
void rotate(int* x, int rank)
{
int* y = (int*)malloc(sizeof(int) * rank * rank);

for(int i=0; i {
// 以原第一行进行分析 一行数变为同一列 以原第一列为例,变为同一行。 (i%rank)*rank使列变为行 rank-(i/rank)-1) 使行变为列
y[(i%rank)*rank+(rank-(i/rank)-1) ] = x[i];
}

for(i=0; 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 {
for(int j=0; j {
printf("%4d", x[i][j]);
}
printf("\n");
}

return 0;
}

#include
void rotate(int* x, int rank)
{
int* y = (int*)malloc(sizeof(int) * rank * rank);

for(int i=0; i {
// 以原第一行进行分析 一行数变为同一列 以原第一列为例,变为同一行。 (i%rank)*rank使列变为行 rank-(i/rank)-1) 使行变为列
y[(i%rank)*rank+(rank-(i/rank)-1) ] = x[i];
}

for(i=0; 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 {
for(int j=0; j {
printf("%4d", x[i][j]);
}
printf("\n");
}

return 0;
}