👤

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!


Răspuns :

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";

}