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

( C++) Am nevoie de un algoritm care determină cea mai lunga secvenţă care se repetă într-un şir.


Exemplu: m=8, X={1, 4, -1, 5, 10, 1, 4, 17};

lungimea 2, poziţiile de început i1=2 şi i2=6;

Răspunsuri la întrebare

Răspuns de andrei750238
3

#include <iostream>

using namespace std;

int main(){

   int n, i, li, ls, t, k, m[1000];

   //Declarare date

   cin >> n;

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

       cin >> m[i];

   }

   //Cautare secventa maxima care se repeta

   int mx=0, cr=0;

   for(li=0;li<n;li++){

       for(ls=li;ls<n;ls++){

           cr=ls-li;

           for(t=ls+1;t<n;t++){

               bool ok=1;

               for(k=0;k<=cr && ok;k++){

                   if(m[li+k]!=m[t+k]) ok=0;

               }

               if(ok){

                   if(cr > mx) mx=cr;

               }

           }

       }

   }

   cout << mx+1;

}

Anexe:

andrei750238: Eficienta programului poate fi inbunatatita. Pentru secvente lungi e posibila iesirea din vector.

Totusi programul e deja suficient de complex. Cateva conditii in plus ar afecta lizibilitatea programului si l-ar face mai greu de inteles.
Maria8431: Multumesc !!
Alte întrebări interesante