2015创发科技校园招聘笔试题——把矩阵顺时针旋转90度

时间:2021-01-11 18:49:57

第一种方法http://blog.csdn.net/friendan/article/details/8824682  

第二种方法http://www.nowamagic.net/librarys/veda/detail/1044

#define n 4  
//矩阵顺时针旋转90度  
void Rotation(int a[n][n])  
{  
	int i;
	int k;
	int j;
	/*顺时针旋转90°的算法*/
		for(i=0;i<n/2;i++)/*共有n/2个旋转环*/
			for(k=0;k<n-1-i-i;k++)/*每个旋转环共有n-1-i-i个旋转组,每组4个元素,逐个旋转*/
			{/*旋转组4个元素,分别是a[i][k+i]左上角,a[k+i][n-1-i]右上角,a[n-1-i][n-1-i-k]右下角,a[n-1-i-k][i]左下角*/
				int t;
				t =a[i][k+i];//左上角
				a[i][k+i]=a[n-1-i-k][i];//左下角的值赋给左上角
                a[n-1-i-k][i]=a[n-1-i][n-1-i-k];//右下角赋给左上角
                a[n-1-i][n-1-i-k]=a[k+i][n-1-i];//右上角赋给右下角
			     a[k+i][n-1-i]=t;//左上角赋给右上角
			}
				/*输出旋转后的矩阵*/
				printf("After rotating the array is:\n");
				for(i=0;i<n;i++)
				{
						for(j=0;j<n;j++)
								printf("%4d",a[i][j]);
								printf("\n");
				}

}  


void main(void)  
{  
	int arr[n][n]={ {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};  
	cout<<"矩阵顺时针旋转前\n";  
	for(int i=0;i<n;i++)  
	{  
		for(int j=0;j<n;j++)  
			printf("%3d ",arr[i][j]);  
		cout<<endl;  
	}  
	Rotation(arr);  
	cout<<"\n矩阵顺时针旋转90度后\n";  
	for(int i=0;i<n;i++)  
	{  
		for(int j=0;j<n;j++)  
			printf("%3d ",arr[i][j]);  
		cout<<endl;  
	}  
	cin.get();  
}