如何从一个数组中提取零并将非零部分保存到另一个数组?

时间:2019-04-23 11:12:59

标签: c++ arrays algorithm primes

我正在研究有关质数的小程序。 例如,我有一个素数数组:

array[15]={0,0,0,13,0,17,0,31,7,3,0,0,0,37,0};

我需要从数组中提取零,然后将剩余数字保存到另一个数组(在这种情况下为tmp)。

我为此操作生成了以下函数。

对于以下代码段:

counter是数组中的质数(在这种情况下为6)。

dB是数组的大小(在这种情况下为15)。

void function2(int array[],int counter){

     int tmp[counter];

     //takes arrayB with zeros in it, extract zeros prints new array.
        for(int a=0;a<counter;a++){

            for(int i=0;i<dB;i++){

                if(array[i]!=0 ){

                    tmp[a]=array[i];
                    break;
                }   
            }
        }
    cout<<"Prime numbers array extracted from above:\n";
    for(int b=0;b<counter;b++){
        cout<<tmp[b]<<" ";
    }   
}

当我执行此代码时,它只输出array(13)的第一个素数作为计数器时间(6)。

13,13,13,13,13,13

但是,我需要以下输出。

13,17,31,7,3,27

我认为我的算法是错误的,如何解决任何想法?

谢谢!

当我更改if语句时:

if(array[i]!=0 && array[a-1]!=array[i])

我正在关注输出

13,17,13,17,13,17

我是否需要对所有6个元素进行更改?

3 个答案:

答案 0 :(得分:1)

方法很简单,只需迭代包含0和素数的原始数组,一旦获得非零数字,请将其添加到tmp数组。

以下是您的代码经过重构以执行上述方法:

void function2(int array[],int counter){    
     int tmp[counter],a=0;
     for(int i=0;i<dB;i++){
                if(array[i]!=0 ){
                    tmp[a++]=array[i];
                }
            }
    cout<<"Prime numbers array extracted from above:\n";
    for(int b=0;b<counter;b++){
        cout<<tmp[b]<<" ";
    }   
}

答案 1 :(得分:0)

这是一个解决方案:它遍历数组,如果元素不为0,则将其插入vector中。

#include <iostream>
#include <vector>
using namespace std;

int foo[15]={0,0,0,13,0,17,0,31,7,3,0,0,0,37,0};

void GetPrimesFromArray(int inputArray[], int array_size) {

    vector<int> tmp;

    for(int i = 0; i < array_size; ++i)
        if(inputArray[i]!=0)
            tmp.push_back(inputArray[i]);

    for(int i = 0; i < tmp.size(); ++i)
        cout << tmp[i] << endl;

}

int main() {
    GetPrimesFromArray(foo, 15);
}

输出:

13
17
31
7
3
37

答案 2 :(得分:0)

首先,仅执行一个循环并遍历所有数组“ array”。当值非零时,将其添加到结果中并增加计数器。当您的计数器等于dB时,请使用break指令退出循环。

第二,每次您尝试添加新的质数时,都将从阵列的开头开始,擦除已找到的先前质数,因此您将不断添加阵列中可用的第一个质数。