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
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];
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
Alte întrebări interesante
Franceza,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă