【发布时间】:2015-01-19 20:48:24
【问题描述】:
我需要编写一个程序来检查两个数组是否相等,这意味着来自array1 的元素都在array2 中。元素可能位于不同的行和列中,但第一个数组中的所有元素都需要在第二个数组中。我写了下面的代码:
#include <stdio.h>
int fun(int m, int tab1[][m], int tab2[][m], int n)
{
int i, j, k, p, itis = 0;
if(itis == 0)
{
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
int elem = tab2[i][j];
for(k=0; k<n; k++)
{
for(p=0; p<m; p++)
{
if(tab1[k][m] == elem)
{
itis = 1;
}
}
}
}
}
}
return itis;
}
int main()
{
int tab1[][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int tab2[][3] = {{7,8,9}, {1,2,3}, {4,5,6}};
int tab3[][3] = {{0,0,0}, {0,0,0}, {0,0,1}};
int tab4[][3] = {{7,8,9}, {1,2,3}, {4,5,0}};
printf("%d\n", fun(3, tab1, tab4, 3));
return 0;
}
如果第一个数组中的所有元素都存在于第二个数组中,我的函数应该返回 1(可能以不同的顺序 - 行/列)。但是对于tab1 和tab4,我得到的是1,而不是0。 (tab1 中有 6 个,但 tab4 中没有 6 个)。有什么想法吗?
【问题讨论】:
-
不应该是 if(tab1[k][p] == elem) ... 吗?但是,当前代码仅检查单个匹配项。您可以为找到的每个匹配项增加一个计数,然后检查计数是否 == m*n。
-
您的代码没有定义
tab4,但您的问题提到了它。 -
一般:展平、排序、比较。