我必须编写一个名为filter的函数,通过调用我之前编写的名为remove的函数,从给定列表中删除名为num的变量的所有倍数。这是我的两个功能。删除操作正常,但过滤器不正常。任何输入都很好,我将非常感激。filter函数应该使用remove从程序中删除num的所有倍数。它目前什么都不做,我认为它没有正确地进入循环。
void remove(int vals[], int sz, int index)
{
for(int i = index ; i <(sz-1); ++i)
{
// shifts down the array once the index element has been removed
vals[i] = vals[i +1];
}
// adds -1 at the end of array once the element has been removed from a certain position.
vals[sz - 1] = -1;
}
void filter(int vals[], int sz, int startIndex, int num)
{
for(int i =2; i< num; i++)
{
if( num % i == 0)
{
remove( vals, sz, num );
}
else if( num % i != 0 );
{
cout << num << "is a prime number" << endl;
}
}
}
问题列表:
- 循环到num,应该循环到sz,因为您希望检查数组中的每个条目
- 您没有对照
vals
中的值检查num
。您需要对照vals[i]
进行检查 - 如果从
vals
中删除一个项目,它将缩短一个项目。您需要使用新计数更新sz
。您还需要弄清楚如何告诉调用者数组现在更短了(除非数组中的-1可以作为标志) - 如果从
vals
中删除一个项目,它会短一个项目。您需要在i
变量中考虑到这一点,否则删除后将跳过一个条目 - 正如@Jon所说,在else-if行后面有一个分号
- 仅仅因为一个数不能被另一个数整除,并不能使它成为素数