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 ...
EDIT。 For循环在这里正常工作,但问题仍然存在。
答案 0 :(得分:11)
您永远不会将j
的值重置为0.
答案 1 :(得分:3)
您应该在两个嵌套循环之间将j
重置为0.
while (i < n)
{
j = 0;
while (j < n)
{
if (a[i] == b[j])
roz++;
}
}
您可以以更有效的方式计算两个数组的交集(有一个O(N*log N)
解决方案)。
答案 2 :(得分: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) {}
答案 3 :(得分:0)
通过查看逻辑,看起来你正在计算两个阵列中常见元素的数量。
你正在做的错误是你没有在第一个while循环中将j的值重置为0。