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

Rezolvare C++ va rog!!

Anexe:

Răspunsuri la întrebare

Răspuns de blindseeker90
0
O metoda eficienta este sa salvezi ultima valoare citita in sir si sa o compari cu urmatoarea valoare care vine din sir.
Doua variabile x0 si x1
x0 este valoarea precedenta celei curente
x1 este valoarea curenta
compari pe x0 cu x1: daca sunt egale, atunci ai cel putin 2 termeni consecutivi
salvezi valoarea cu x1 intr-o valoare care se repeta si apoi la final il transformi pe x curent in cel precedent x1=x0, si apoi repeti procesul
Daca nu sunt egale, atunci resetezi numarul de termeni consecutivi la 1, pentru ca nu mai sunt 2 termeni consecutivi

Metoda este eficienta 1) Folosesti doar 2 variabile de memorie parcurgand tot sirul 2) Traversezi sirul o singura data deci are complexitate O(n)
codul C++ este mai jos

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

int main(){
ifstream fib("bac.txt");
int x0,x1,este_cons, nr_cons_egale=1,nr_cons_maxima=1,val_repetata,i;
fib>>x0;
while(fib>>x1){

if(x1==x0){
nr_cons_egale++;
if(nr_cons_egale>nr_cons_maxima){
nr_cons_maxima=nr_cons_egale;
val_repetata=x1;
}
else if(nr_cons_egale==nr_cons_maxima){
val_repetata=x1;
}
}
else{
nr_cons_egale=1;
}
x0=x1;
}
cout<<nr_cons_maxima<<endl;
for(i=1;i<=nr_cons_maxima;i++){
cout<<val_repetata<<" ";
}

}
Alte întrebări interesante