Informatică, întrebare adresată de bobocualexandra, 8 ani în urmă

Am nevoie de ajutor la pb 166, pbinfo (in C++) :
Enunț: Se dau n numere naturale, reprezentând elementele unui vector.

Determinați cea mai lungă secvență de elemente pare din vector. Dacă există mai multe secvențe cu lungime maximă se va determina cea cu suma elementelor maximă. Dacă există mai multe astfel de secvențe se va determina cea mai din stânga.
Fişierul de intrare secvmax.in conţine numărul n și n valori naturale, reprezentând elementele vectorului. Valorile din fișier pot fi dispuse pe mai multe linii.
Fişierul de ieşire secvmax.out va conţine pe prima linie numerele st și dr, reprezentând indicii de început și de sfârșit ale secvenței determinate.


Răspunsuri la întrebare

Răspuns de Daniel4761
1

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("secvmax.in");

ofstream g("secvmax.out");

int main()

{

int n, v[200], i, p1=0, p2, s=0, smax=0, st, dr, lmax=0;

f>>n;

for(i=1;i<=n;i++)

 f>>v[i];

for(i=1;i<=n;i++){

 if(v[i]%2==0){

  if(!p1) p1=i;

  p2=i; s+=v[i];

 }

 else{

  if(p1)

   if(p2-p1+1>lmax){lmax=p2-p1+1; st=p1; dr=p2;}

   else if(p2-p1+1==lmax && s>smax){smax=s; st=p1; dr=p2;}

  s=0; p1=0;

 }

}

if(p1)

 if(p2-p1+1>lmax){lmax=p2-p1+1; st=p1; dr=p2;}

 else if(p2-p1+1==lmax && s>smax){smax=s; st=p1; dr=p2;}

if(lmax) g<<st<<' '<<dr;

f.close();

g.close();

return 0;

}

Alte întrebări interesante