我试图看看如何用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.
答案 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;
}