Răspuns :
Răspuns:
#include <iostream>
using namespace std;
int n,m, k,i, A[10002],B[10002],C[20002];
void intersectie3(int A[], int B[], int C[])
{
int a=A[0],b=B[0],c=0, iB=1, iA;
C[0]=0;
for (iA=1; iA<=a; ++iA)
{
while (iB<=b && B[iB]!=A[iA]) ++iB;
if (iB<=b)
{
++c; C[c]=A[iA];
}
if (iB>b) iB=1;
else ++iB;
}
if (c>0) C[0]=c;
}
int main()
{
cout << "n="; cin >> n;
A[0]=n;
for (i=1; i<=n; ++i)
cin >> A[i];
cout << "m="; cin >> m;
B[0]=m;
for (i=1; i<=m; ++i)
cin >> B[i];
intersectie3(A,B,C);
k=C[0];
if (k==0)
cout << "Intersectie vida";
else
for (i=0; i<=k; ++i)
cout << C[i] << " ";
return 0;
}
Explicație:
sper să fie înţeles codul... :)))
prin variabila iA se înţelege indicele elementului curent din A, la fel şi pentru iB pentru B şi c pentru C.
Am o intuiţie că se poate face mai eficient. Dacă găsesc, revin...
Iată am revenit cu o nouă idee... ce mai mult ţine cont de faptul că tablourile sunt crescătoare. postez acum numai functia..
void intersectie3(int A[], int B[], int C[])
{
int a=A[0],b=B[0],c=0, iB=1, iA=1;
C[0]=0;
while (iA<=a && iB<=b)
{
if (A[iA]==B[iB])
{
++c; C[c]=A[iA];
++iA; ++iB;
}
else
{
if (A[iA]<B[iB]) ++iA;
else ++iB;
}
}
if (c>0) C[0]=c;
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.