📅  最后修改于: 2023-12-03 15:42:15.919000             🧑  作者: Mango
这道题目是GATE-CS-2005题库中的第61题,题目要求我们使用C语言编写一个程序,实现将一个二维数组顺时针旋转90度的功能。
给定一个n x n的二维数组,现在需要将其顺时针旋转90度。例如,下图所示的数组旋转后的结果为右边的数组:
原数组:
1 2 3
4 5 6
7 8 9
旋转后的数组:
7 4 1
8 5 2
9 6 3
对于这个问题,我们可以分别考虑矩阵中每个元素在旋转后的位置。可以发现,矩阵中的元素 (i, j)
在旋转后的位置是 (j, n-i-1)
。因此,我们可以创建一个新的数组,遍历原始数组的每个元素,并将其旋转到新的数组中相应的位置。
下面是一个基于上述思路实现的简单C程序,用于顺时针旋转二维数组:
#include <stdio.h>
#define N 3
void rotate(int arr[][N])
{
int temp[N][N];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
temp[j][N-i-1] = arr[i][j];
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
arr[i][j] = temp[i][j];
}
int main()
{
int arr[N][N] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
printf("Original Array:\n");
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
rotate(arr);
printf("Rotated Array:\n");
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
以上就是这道GATE-CS-2005的第61题的C程序实现方法以及算法思路的简要介绍。该程序仅为一种可能的实现方法,还有其他的实现方法可以达到同样的效果。