【问题标题】:Reversing a 2D array in C在 C 中反转二维数组
【发布时间】:2018-01-31 03:48:06
【问题描述】:

我似乎无法创建一个通用方法来反转任何大小的二维数组。我有以下代码,仅适用于 3x3 数组。有没有办法修改此代码以反转任何大小的二维数组?

I need my array to go from:
[ 1 2 3 ]
[ 4 5 6 ]
[ 7 8 9 ]

to:  
[ 3 2 1 ]
[ 6 5 4 ]
[ 9 8 7 ]

但这应该适用于任何数组大小,而不仅仅是 3x3 也不仅仅是 nxn 数组(方形数组)。

    #include<stdio.h>
#include<string.h>

int main()
{
    int r,r2,c,c2,temp;

    int rows = 3;
    int columns = 3;

    int a[rows][columns]; 

    a[0][0] = 1;
    a[0][1] = 2;
    a[0][2] = 3;

    a[1][0] = 4;
    a[1][1] = 5;
    a[1][2] = 6;

    a[2][0] = 7;
    a[2][1] = 8;
    a[2][2] = 9;

    r = 0;
    r2 = rows-1;

    c = 0;
    c2 = columns-1; 

    while(r<=r2){
        while(c<=c2){
            temp = a[r][c];
            a[r][c] = a[r2][c2];
            a[r2][c2] = temp;

            c++;
            c2--;
        }

        temp = a[r][c];
        a[r][c] = a[r2][c2];
        a[r2][c2] = temp;

        r++;
        r2--;

    }


    for(r=0;r<3;r++){
        for(c=0;c<3;c++){
            printf("%d\n",a[r][c]);
        }
    }
}

【问题讨论】:

  • “我有以下代码,它只适用于 3x3 数组”——你确定吗?为什么它只适用于 3X3 数组,并注意发布的代码没有给出声称的输出。

标签: c arrays methods 2d reverse


【解决方案1】:

您正在反转数组的每一行。因此,编写一个函数来反转作为参数传递给它的数组。

第二个是这样的,

void swap(int *a, int *b){
     int temp = *a;
     *a = *b;
     *b = temp;
}
void rev(int a[],const int col){
    for(size_t i = 0; i < col/2; i++){
        swap(&a[i],&a[col-i-1]);
    }
}

int main(void){
...

for(size_t i = 0;  i < rows; i++)
   rev(a[i],columns);
...
return 0;
}

您的代码的问题在于您自己与您想要实现的目标相矛盾。

您进行的第一次交换在r2,c20,0 之间进行,这样在您交换最后一行和第一行时的第一次迭代。那是你不想做的(至少问题是这样说的)。

【讨论】:

    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多