📜  门| GATE-CS-2005 |第 61 题(1)

📅  最后修改于: 2023-12-03 15:42:15.919000             🧑  作者: Mango

GATE-CS-2005 | 第 61 题介绍

这道题目是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程序代码

下面是一个基于上述思路实现的简单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程序实现方法以及算法思路的简要介绍。该程序仅为一种可能的实现方法,还有其他的实现方法可以达到同样的效果。