输入三个整数,front(开头),rear(结尾),num(度数),num个相邻的数字相加不是素数,输出从front到rear的反素数序列,如果没有,则输出“没有”。
#include<iostream>
using namespace std;
class Anti_prime{
private:
int front;
int rear;
int num;
typedef struct{ //构造队列
int *data;
int front;
int rear;
int length;
}Squeue;
Squeue q;
public:
void init_queue() //初始化队列
{
q.data=new int[20];
q.front=q.rear=0;
q.length=0;
}
void enqueue(int elem) //入队操作
{
q.data[q.rear]=elem;
q.length++;
q.rear=(q.rear+1)%20;
}
void output_q() //输出队列
{
for(int i=0;i<q.length;i++)
{
cout<<q.data[i]<<" ";
}
}
bool isPrime(int obj) //判断是否为素数
{
if(obj==2) return true;
if(obj%2==0) return false;
for(int i=3;i*i<=obj;i=i+2)
if(obj%i==0) return false;
return true;
}
void get_data() //输入数据
{
cout<<"请输入由三个整数组成的输入集:"<<endl;
cin>>front>>rear>>num;
}
void search_ap() //查找反素数序列
{
int i,j,k,temp1,temp2;
int visited[100]={0};
for(i=front;i<=rear;i++)
{
for(j=i+1;j<=rear;j++)
{
for(k=j+1;k<=rear;k++)
{
temp1=i+j;
temp2=j+k;
if(!isPrime(temp1)&&!isPrime(temp2)&&visited[i]==0&&visited[j]==0&&visited[k]==0)
{
enqueue(i);
enqueue(j);
enqueue(k);
visited[i]=1;
visited[j]=1;
visited[k]=1;
break;
}
}
}
}
if(q.length==10)
output_q();
else
cout<<"No anti-prime sequence exists."<<endl;
}
};
int main()
{
Anti_prime ap;
ap.init_queue();
ap.get_data();
ap.search_ap();
}
我想通过遍历从front到rear的数字,将符合条件的的数字存入队列中,最后如果队列中的数字恰好为rear到front的长度,则输出这个反素数序列,否则输出没有反素数序列。
上面的“查找反素数序列”的函数应该怎么写,我没有任何思路。