我正在研究有关质数的小程序。 例如,我有一个素数数组:
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个元素进行更改?
答案 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指令退出循环。
第二,每次您尝试添加新的质数时,都将从阵列的开头开始,擦除已找到的先前质数,因此您将不断添加阵列中可用的第一个质数。