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

Buna!
Imi poate explica cineva cineva partea din acest cod ce are legatura cu limitele din stanga si dreapta al secventei. Mai precis:
for (j=2; j<=m &&(i+j-1)<=n;j++)
if (x[i+j-1]!=y[j])
Nu inteleg deloc ce se intampla acolo.
Va atasez intreg programul ca sa se vada concret despre ce vorbesc.

#include

using namespace std;

int main()
{
int n,i,m,j,ok=0,c=0,x[1001],y[1001],st,dr;
cin >>n;
for (i=1; i<=n;i++)
cin >>x[i];
cin >>m;
for (i=1; i<=m;i++)
cin >>y[i];
for (i=1; i<=n;i++)
if (x[i]==y[1])
{
ok=1;
for (j=2; j<=m &&(i+j-1)<=n;j++)
if (x[i+j-1]!=y[j])
{
ok=0;
break;
}
if (ok && j-1==m)
c++;
}
cout < return 0;
}
Multumesc!


sikesjack1: da, varianta ta e mai buna. Dar nu inteleg partea cu limitele secventelor si cum si de ce sunt implementate in cod. Si nu stiu de unde sa le invat :(
boiustef: vorbeşti despre valorile pe care le poate lua i la cautarea secvenţei y în x ? DAcă n=10 şi m=4, atunci ultima secvenţă care trebuie cercetată în x este de la poziţia 7 (7,8,9,10 iată ai 4 elemente), deci i ia valori de la 1 la n-m+1 (10-4+1)
boiustef: tr să pui mai mult pe hârtie, să mişti vectorul y şi vezi inde va fi ultima lui poziţie
sikesjack1: dar in x nu pot fi elemente comune cu y, pana la pozitia 7??
boiustef: de ce nu, da, pot fi dar vorbim de valoarea maximă a lui i care poate şi merită a fi cercetată
boiustef: dacă undeva găseşti că y se conţine în x opreşti căutarea
sikesjack1: am inteles.
sikesjack1: multumesc! :)
boiustef: cu plăcere, Succese! Când ai necesitate, adresează-te
sikesjack1: bine, multumesc!

Răspunsuri la întrebare

Răspuns de boiustef
0

Răspuns:

Explicație:

#include <iostream>

using namespace std;

int n,m,i,j,x[1002],y[1002], ok, poz, p;

int main()

{

   cin >> n;

   for (i=1; i<=n; ++i) cin >> x[i];

   cin >> m;

   for (i=1; i<=m; ++i) cin >> y[i];

   i=1; ok=0;

   while (i<=n-m+1 && ok==0)

   {

       while (x[i]!=y[1]) ++i;

       if (i<=n-m+1)

       {

           poz=i; ok=1; p=i;

           for (j=1; j<=m; ++j)

           {

               if (y[j]!=x[p++])

               {

                   ok=0; break;

               }

           }

       }

       ++i;

   }

   if (ok) cout << poz;

   else cout << "NU";

}

Alte întrebări interesante