1
int count(int *a, int *b, int n) {
    int i=0,j=0,roz=0;

    while(i<n) {
        while(j<n) {
            if(a[i]==b[j])
                roz++;
            j++;
        }
        i++;
    }
    return roz;
}

n 是 a 或 b 数组的大小(两者大小相同)。嵌套的 while 循环似乎只工作一次,因为 i = 0。接下来发生的事情似乎是神奇地将 n 更改为 1(一开始是 5),因此嵌套的 while 不会第二次循环. 为什么呢?

有趣的是,在返回之前回显 n 会显示正确的值,即 5...

编辑。For 循环在这里正常工作,但问题仍然存在。

4

4 回答 4

11

您永远不会将 的值重置j为 0。

于 2013-01-05T15:14:27.657 回答
3

j您应该在两个嵌套循环之间重置为 0。

while (i < n)
{
  j = 0;

  while (j < n)
  {
    if (a[i] == b[j])
      roz++;
  }
}

您可以以更有效的方式计算两个数组的交集(有一个O(N*log N)解决方案)。

于 2013-01-05T15:14:36.217 回答
1

的值在n这里没有改变。对于 i = 1 或更高版本没有执行嵌套循环的原因是您没有重置 j 的值。比如说,n是 5。当 i = 0 嵌套循环正确执行并且 j 的值在它完成后为 5 时。当 i = 1 时, j 仍然是 5,因此它永远不会进入嵌套循环。

while(i<n)
{
    j = 0; // reset j here to solve the problem
    while(j<n) {}
于 2013-01-05T15:15:33.093 回答
0

好吧,通过查看逻辑,您似乎正在计算两个数组中公共元素的数量。

您正在做的错误是您没有在第一个 while 循环中将 j 的值重置为 0。

于 2013-01-05T15:17:55.263 回答