Răspuns :
Răspuns:
#include <iostream>
using namespace std;
int n,k,secvi,secvj,starti,startj,p,a[1001], i, ok;
int main()
{
cin >> n >> k;
for (i=1; i<=n; ++i) cin >> a[i];
for (secvi=1; secvi<k; ++secvi)
{
starti=(secvi-1)*(n/k)+1;
for (secvj=secvi+1; secvj<=k; ++secvj)
{
startj=(secvj-1)*(n/k)+1;
ok=1;
for (p=0; p<n/k; ++p )
{
if (a[starti+p]!=a[startj+p])
{ ok=0; break; }
}
if (ok)
{
cout << secvi << " " << secvj;
return 0;
}
}
}
if (ok==0) cout << "NU";
}
Explicație:
cercetează codul meu că e mai simplu, cred eu :)))
secvi e secvenţa parcursă parcă de i (e o parabolă)
secvj e secvenţa de parcă parcursă de j
starti e indicele primului număr din secvi
startj este indicele primului număr din secvj
p va parcurge valori de la 0 la n/k-1 şi astfel
starti+p sunt indicii numerelor din secvi, iar
startj+p sunt indicii numerelor din secvj
Să facem puţină mate cu formula starti=(secvi-1)*(n/k)+1;
fiecare secvenţă are n/k numere, 15/5=3 numere în secvenţă.
Dacă secvi=1, at. starti=(1-1)*(3)+1=1, adică start1 e poziţionat pe primul număr din secvenţa1, care acum se numeşte secvi
Dacă secvi=2, at. starti=(2-1)*3+1=4, adică starti este poyiţionat pe al patru-lea număr, care este primul din secvenţa a doua ....
Şi analog se fac calculele şi pentru startj
Sper să fiu înţeles....
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!