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 :(
Răspunsuri la întrebare
Răspuns de
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
Istorie,
8 ani în urmă
Fizică,
8 ani în urmă
Religie,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă