行列方阵顺时针旋转

时间紧张,先记一笔,后续优化与完善。

    例如,如下的方阵:

 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

    每日一道理
书籍好比一架梯子,它能引领人们登上文化的殿堂;书籍如一同把钥匙,它将帮助我们开启心灵的智慧之窗;书籍犹如一条小船,它会载着我们驶向知识的海洋。
#include <stdio.h>
void rotate(int* x, int rank)
{
	int* y = (int*)malloc(sizeof(int) * rank * rank);  

	for(int i=0; i<rank * rank; i++)
	{
         // 以原第一行停止分析  一行数变成一同列  以原第一列为例,变成一同行。  (i%rank)*rank使列变成行   rank-(i/rank)-1) 使行变成列
		y[(i%rank)*rank+(rank-(i/rank)-1) ] = 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;
}

文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

posted @ 2013-04-29 13:24  xinyuyuanm  阅读(417)  评论(0编辑  收藏  举报