Cerința
Numim secvență pară într-un șir o succesiune de termeni ai șirului cu proprietatea că sunt numere pare și că se află pe poziții consecutive în șir; orice secvență are cel puțin doi termeni și este maximală în raport cu proprietatea precizată (dacă i se adaugă un alt termen, secvența își pierde această proprietate). Lungimea secvenței este egală cu numărul termenilor săi.
Scrieți un program care citește un șir de cel mult 10
6
numere naturale din intervalul [0,10
9
]
și determină numărul de secvențe pare de lungime maximă din șir.
Date de intrare
Fișierul de intrare secventapara.in
conține cel mult 10
6
numere naturale din intervalul [0,10
9
]
, separate prin spații.
Date de ieșire
Fișierul de ieșire secventapara.out
va conține pe prima linie numărul de secvențe pare de lungime maximă din șir.
Restricții și precizări
- Proiectați un algoritm eficient din punctul de vedere al spațiului de memorie utilizat şi al timpului de executare:
- se recomandă o soluție care să nu memoreze elementele șirului într-un tablou sau altă structură de date similară.
Exemplu
secventapara.in
1 2 3 4 6 10 2 8 5 7 9 4 6 10 121 20 4 11 10 2 5 2 6 8 10 16
secventapara.out
2
Explicație
Secvențele pare din șir sunt:
4 6 10 2 8 4 6 10 20 4 10 2 2 6 8 10 16
Dintre acestea, au lungime maximă secvențele:
4 6 10 2 8 2 6 8 10 16
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema SecventaPara:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("secventapara.in");
ofstream fout("secventapara.out");
int main(){
int x, lgmax = -1, lg = 0, cntmax = 0;
while(fin>>x)
if(x % 2 == 1)
lg = 0;
else
{
lg ++;
if(lg >= 2)
{
if(lg > lgmax)
lgmax = lg, cntmax = 1;
else
if(lg == lgmax)
cntmax ++;
}
}
fout << cntmax;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2806 SecventaPara
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2806 SecventaPara de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!