如何在C语言中检查两个数组是否互为镜像?

3
我将尝试使用C语言来检查两个二维数组是否对称/镜像。

例如,如果

array1 = { { 2, 5, 10 }, { 2, 1, 9 } };
array2 = { { 10, 5, 2 }, { 9, 1, 2 } };

这些数组实际上是二维数组。

我该如何处理呢?到目前为止,我尝试读取两个二维数组并使用if/else语句和一个布尔值来检查这两个数组是否相等。但我不确定如何检查它们是否是彼此的镜像矩阵。

2 5 10  |  10 5 2
2 1  9  |   9 1 2

编译器来自1989年。

2
并行遍历数组,一个按升序排列,另一个按相反顺序排列。然后进行比较。容易。 - Eugene Sh.
1
在一个数组中使用 i 作为索引,另一个数组使用 n-i-1,其中 n 是它们的长度。 - Temani Afif
1
这些看起来像是一维数组。同时建议使用更近期的(版本)编译器。 - yano
1
如果您的U需要使用gcc,我强烈建议立即放弃VS。 - Eugene Sh.
1
到目前为止,我尝试了读取两个二维数组并使用if / else语句。请发布该代码。 - chux - Reinstate Monica
显示剩余8条评论
3个回答

0

你想以相同的方式读取两个矩阵的值(提示1:使用函数)。因此,它们将都是这样的:

第一个:

{{m1[0][0], m1[0][1], m1[0][2],..., m1[0][99]},
 {m1[1][0], m1[1][1], m1[1][2],..., m1[1][99]},
 ...
 {m1[99][0], m1[99][1], ..., m1[99][99]}}

第二个:

{{m2[0][0], m2[0][1], m2[0][2],..., m2[0][99]},
 {m2[1][0], m2[1][1], m2[1][2],..., m2[1][100]},
 ...
 {m2[99][0], m2[99][1], ..., m2[99][99]}}

但是在读取m1数组的第一个循环中,您有一个错误:

for (a = 0; b < row; i++)

然后在你的比较循环内部,你有:

m1[row][col] != m2[row][col]

这将比较具有相同索引的两个矩阵的值。因此,您将比较m1 [0] [0]m2 [0] [99]不同,而是将比较m1 [0] [0]m2 [0] [0]


0

简单明了:

#include <stdio.h>
#define size 3

int main (void){
    int i,j,k,flag=1;
    int array1[][size] = { { 2, 5, 10},{ 2, 1, 9 } }, array2[][size] = { {10, 5, 2 }, { 9, 1, 2 } };

    //Check mirror image or not
    for(i=0;i<size-1;i++) {
        for(j=0,k=size-1;j<size;j++,k--) {
            if(array1[i][j]!=array2[i][k]) {
                flag=0;
                break;
            }
        }
    }
    if(flag)
        printf("Mirror image to each other");
    else
        printf("Not a mirror image to each other");
    return 0;
}

非常感谢。我需要同时用于2D和3D矩阵,但我知道如何开始for循环,所以现在应该没问题了。谢谢。顺便问一下,为什么大小必须是一个常数? - Far Sight
常量的大小没有限制。您也可以在运行时获取大小,没有任何约束。 - Aashish Kumar
1
为什么需要一个 tmp 数组? - chqrlie

0

您可以使用2个嵌套循环来验证此属性:

#include <stdio.h>

#define COLS 3
#define ROWS 2

int main(void) {
    int array1[ROWS][COLS] = { { 2, 5, 10 }, { 2, 1, 9 } };
    int array2[ROWS][COLS] = { { 10, 5, 2 }, { 9, 1, 2 } };
    int xmirror = 1;
    int ymirror = 1;
    int xymirror = 1;

    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (array1[i][j] != array2[i][COLS - 1 - j])
                xmirror = 0;
            if (array1[i][j] != array2[ROWS - 1 - i][j])
                ymirror = 0;
            if (array1[i][j] != array2[ROWS - 1 - i][COLS - 1 - j])
                xymirror = 0;
        }
    }
    if (xymirror)
        printf("Mirror image to each other rowwise and columnwise\n");
    if (ymirror)
        printf("Mirror image to each other rowwise\n");
    if (xmirror)
        printf("Mirror image to each other columnwise\n");
    if (xmirror + ymirror + xymirror == 0)
        printf("Not a mirror image of each other\n");
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接