如何在C中检查两个数组是否是彼此的镜像?

时间:2017-09-19 18:33:41

标签: c arrays for-loop boolean

我试图看看如何用C来检查两个2d阵列是否对称/相互镜像。

例如,如果

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

数组实际上是2d数组。

我该如何处理?到目前为止,我试图读取两个2d数组并使用if / else语句和bool来检查两个数组是否彼此相等。但我不确定如何检查它们是否是彼此的镜像矩阵。

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

编译器来自89.

3 个答案:

答案 0 :(得分: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]进行比较。

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}