二维数组旋转90度、180度、270度

时间:2024-03-11 09:18:20

 

给定一个 × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 /180 /270 度。

  int a[3][3]={{1,2,3},{2,3,4},{4,5,6}};  //定义3*3数组演示
  int b[3][3],c[3][3],d[3][3];
  for(int i=0;i<3;i++)
  {   
     for(int j=0;j<3;j++)
	 {
		b[i][j]=a[2-j][i];  //顺时针旋转90 度
		c[i][j]=a[2-i][2-j]; //顺时针旋转180度
		d[i][j]=a[j][2-i];   //顺时针旋转270度
	 }
		
  }

对数组的通过改变数组的下标进行数组旋转的操作

输出结果

*****原数列************
1 2 3
2 3 4
4 5 6
****顺时针旋转90 度****
4 2 1
5 3 2
6 4 3
****顺时针旋转180度****
6 5 4
4 3 2
3 2 1
****顺时针旋转270度****
3 4 6
2 3 5
1 2 4
**********************

原理:顺时针旋转90度时,列号变行号,且号下标顺序颠倒。

  0 1 2
0 1 2 3
1 2 3 4
2 4 5 6

即: a[0][0] -> b[0][2]      

        a[1][0] -> b[0][1]

        a[2][0] -> b[0][0]      //第一列变第一行

用变量 i 表示行,表示列的话,为a[i][j] = b[2-j][i] //其中2为数组下标最大值

即:

在n*n数组中只需令a[i][j] = b[n-1-j][i]即可完成数组旋转90度

在n*n数组中只需令c[i][j]=a[n-1-i][n-1-j]即可完成数组旋转180度

在n*n数组中只需令d[i][j]=a[j][n-1-i]即可完成数组旋转270度