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 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!