Informatică, întrebare adresată de Saharra, 9 ani în urmă

De ce iau 20p?

Cerința
Se consideră un șir cu n elemente, numere naturale. Folosind metoda Divide et Impera, determinați cel mai mare element prim din acest șir.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.

Date de ieșire
Programul va afișa pe ecran numărul M, cel mai mare element prim al șirului.

Restricții și precizări
1 ≤ n ≤ 1000
elementele șirului vor fi mai mici decât 1.000.000
se garantează că în șir apare cel puțin un element prim
se recomandă folosirea metodei Divide et Impera
Exemplu
Intrare

6
4 1 8 4 3 5
Ieșire

5



#include

using namespace std;

int prim(int x){
int k, ok=1;
for(k=2; k*k<=x; k++)
if(x%k==0)
ok= 0;
return ok;
}

int main()
{
int n, st, dr, mij, v[101];
int maxxs=0, maxxd=0;
cin>>n;
for(int i=1; i<=n; i++){
cin>>v[i];
}
st=1;
dr=n;
mij=(st+dr)/2;
while(st<=mij){
if(prim(v[st])>maxxs)
maxxs=v[st];
st++;
}
while(dr>mij){
if(prim(v[dr])>maxxd)
maxxd=v[dr];
dr--;
}
if(maxxd>maxxs)        cout<<maxxd;    else cout<<maxxs;
return 0;
}

Răspunsuri la întrebare

Răspuns de MichaelKing
1
O sugestie utila:
in loc de:
  if(prim(v[st])>maxxs)
       maxxs=v[st];
introdu: 
   if(prim(v[st]) && v[st]>maxxs)
         maxxs=v[st];
Analog, inlocuieste:
    if(prim(v[dr])>maxxd)
         maxxd=v[dr];
cu:
    
if(prim(v[dr]) && v[dr]>maxxd)
         maxxd=v[dr];

Saharra: Mersii
Saharra: acum iau 60... :)))
Alte întrebări interesante