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

scrieti un program care citeste de la tastatura un sir de caractere format din cel mult 250 de caractere litere mici ale alfabetului englez si afiseaza pe ecran sirul rezultat si numarul minim de etape de eliminare astfel incat sa nu mai existe in sir doua caractere identice.O etapa de eliminare se aplica unei secvente de caractere identice care incepe de la pozitia i din sir ,sterge secventa de pe pozitia i apoi repeta stergerea secventelor de caractere identice ce includ pozitia i pana cand nu se mai obtin caractere identice alaturate ex.pt mtopppppootatnnnne se afiseaza mate 2

Răspunsuri la întrebare

Răspuns de andrei750238
3

Nu inteleg exact ce reprezinta o etapa de eliminare. Eu contorizez 3, nu 2. Un exemplu mai clar ar fi fost apreciat.  In orice caz, programul elimina caracterele asa cum trebuie.

#include <iostream>

#include <cstring>

using namespace std;

int main(){

   char txt[250];

   int i,nr_iteratii=0;

   //Citire date

   cin.get(txt, 250);

   //Stergere dubluri

   bool perfect=0;

   while(!perfect){

       //Mareste numarul de etape

       nr_iteratii++;

       //Presupune ca sirul e complet procesat

       perfect = 1;

       //Compara fiecare litera cu cea urmatoare

       for(int i=0;i<strlen(txt)-1;i++){

           if(txt[i] == txt[i+1]){

               //Daca literele coincid atunci sirul nu e complet procesat.

               perfect=0;

               //Gaseste locul unde se termina secventa

               int j=i+1;

               while(txt[j]==txt[i])j++;

               //Sterge secventa respectiva

               strcpy(txt+i,txt+j);

           }

       }

   }

   //Afiseaza rezultat

   cout << txt << " " << nr_iteratii-1;

}

Anexe:
Alte întrebări interesante