1. 程式人生 > >2015創發科技校園招聘筆試題——把矩陣順時針旋轉90度

2015創發科技校園招聘筆試題——把矩陣順時針旋轉90度

第一種方法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();  
}