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循环在这里可以正常工作,但问题仍然存在。
发布于 2013-01-05 23:14:28
永远不要将j的值重置为0。
发布于 2013-01-05 23:14:36
应将两个嵌套循环之间的j重置为0。
while (i < n)
{
j = 0;
while (j < n)
{
if (a[i] == b[j])
roz++;
}
}您可以以更有效的方式计算两个数组的交集(有一种O(N*log N)解决方案)。
发布于 2013-01-05 23:15:33
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) {}https://stackoverflow.com/questions/14173093
复制相似问题