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

Ma ajuta cineva, îmi trebuie urgent.....??

Anexe:

Răspunsuri la întrebare

Răspuns de blindseeker90
3
Algortimul este urmatorul:
se considera variabilele:
x: contine ultima valoare citita din sir
lung_sir_par: lungimea actualului sir par
lung_sir_par_maxim: lungimea maxima a unui sir par actuala
nr_sir_par_maxim: numarur actual de siruri pare maxime
Ultimele 3 variabile sunt initializate cu 0 pentru ca nu am citit inca nimic
Pe masura ce parcurgem sirul element cu element facem urmatorii pasi:
- verificam daca x este par. Daca este par, incrementam cu o unitate lungimea sirului par. Apoi
   - comparam lungimea actualului sir par cu lungimea sirului par maxim gasita pana in acel moment. Daca este mai mare, atunci lungimea sirului par maxim este cea a sirului par actual iar numarul de siruri pare maxime este resetat la 1, pentru ca este primul sir gasit de acea lungime. Daca sunt egale, atunci incrementam cu o unitate numarul de lungimi de siruri pare pentru ca am mai gasit inca una.
- daca numarul actual x este impar, atunci resetam lungimea sirului par actual la 0 pentru ca nu mai avem nici un numar par in noul sir si s-a terminat cel vechi.

Apoi verificam daca lungimea sirului par maxim este mai mica decat 2. Daca este mai mica, inseamna ca nu exista decat elemente pare izolate, singure, deci nu constituie secvente si nu exista atunci o solutie pentru acel sir. Altfel, afiseaza solutia.
Acest algoritm este eficient: ca viteza de procesare pentru ca parcurge o singura data sirul la citire. Ca memorie pentru ca foloseste doar 4 variabile de tip integer pentru a putea receptiona si solutiona problema, fara sa se foloseasca vreun vector. Si nu se folosesc nici un fel de alte structuri de loop in afara de cea pentru citire.

b)
#include <iostream>
#include <fstream>
using namespace std;

int main(){
int x,lung_sir_par=0,lung_sir_par_maxim=0,nr_sir_par_maxim=0;
ifstream fib("bac.txt");
while(fib>>x){
if(x%2==0){
lung_sir_par++;
if(lung_sir_par>lung_sir_par_maxim){
lung_sir_par_maxim=lung_sir_par;
nr_sir_par_maxim=1;
}
else if(lung_sir_par==lung_sir_par_maxim){
nr_sir_par_maxim++;
}
}
else{
lung_sir_par=0;
}
}
if(lung_sir_par_maxim<2){
cout<<"Nu exista un sir din numere pare!";
return 0;
}
cout<<"Nr de siruri maxime:"<<nr_sir_par_maxim<<" de lungime maxima "<<lung_sir_par_maxim;
return 0;
}
Alte întrebări interesante