C++数组,我应该如何修复我的数组,它需要删除一个变量的所有倍数



我必须编写一个名为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;
        }
    }
}

问题列表:

  1. 循环到num,应该循环到sz,因为您希望检查数组中的每个条目
  2. 您没有对照vals中的值检查num。您需要对照vals[i]进行检查
  3. 如果从vals中删除一个项目,它将缩短一个项目。您需要使用新计数更新sz。您还需要弄清楚如何告诉调用者数组现在更短了(除非数组中的-1可以作为标志)
  4. 如果从vals中删除一个项目,它会短一个项目。您需要在i变量中考虑到这一点,否则删除后将跳过一个条目
  5. 正如@Jon所说,在else-if行后面有一个分号
  6. 仅仅因为一个数不能被另一个数整除,并不能使它成为素数

最新更新