Я пытаюсь решить алгоритм для извлечения подпоследовательности из массива. Он должен отображать самую длинную подпоследовательность простых чисел. Я написал весь алгоритм, но у меня все еще есть бесконечный цикл, и я не могу понять, где и почему. Я увеличиваю оба индекса и изменяю первый индекс в конце, но он все еще не работает. Большое спасибо !!!Извлечение подпоследовательности из массива
P.S: citire считывает массив, prim определяет, является ли число простым или скомпонованным, afisare отображает подпоследовательность, а detSecv определяет самую длинную подпоследовательность.
#include <iostream>
#include <math.h>
using namespace std;
void citireSecv(int &n,int x[50])
{
cout<<"Da n: ";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"Da un nr: ";
cin>>x[i];
}
}
int prim(int n)
{
int d=2;
while(d<=sqrt(n) && n%d!=0)
{
if(d==2)
d=3;
else
d=d+2;
}
if(d>sqrt(n)) return 1;
else return 0;
}
void afisare(int n,int x[50],int st,int f)
{
for(int i=st;i<=f;i++)
cout<<x[i]<<" ";
}
void detSecv(int n,int x[100],int &st,int &f)
{
st=1; f=0;
int i=1,j;
while(i<=n-1)
{
while(i<=n-1)
{
if(prim(x[i])==0 && prim(x[i+1])==0) i++;
}
j=i+1;
while(j<=n-1)
if(prim(x[j])==0 && prim(x[j+1])==0) j++;
if((j-i) > (f-st))
{
st=i;
f=j;
}
i=j+1;
}
}
int main()
{
int n,x[100],st,f;
citireSecv(n,x);
detSecv(n,x,st,f);
afisare(n,x,st,f);
return 0;
}
Входные данные:
n=2
First number is: 5
Second number is: 7
Fyi, это то, для чего были созданы отладчики. Кроме того, включите свои входные данные, которые воспроизводят ваш бесконечный цикл как часть вопроса в отдельном списке. – WhozCraig
Я обновил свой вопрос для ввода данных. Что касается отладчика, я действительно привык к этому, потому что я обычно использую Eclipse для Android Developing. Я очень новичок в этом Codeblocks и C++. Благодаря ! – Ezek