2016-11-01 2 views
1

Ich habe diesen Code, an dem ich gearbeitet habe, die Werte von Array1 zeigt, die Duplikate von Array2 und Duplikate anderer Werte in Array1 sind, aber ich habe Schwierigkeiten bei der Berechnung der Anzahl der eindeutigen Werte. [SizeOfA, sizeOfB, a [] und b [] sind durch die Hauptfunktion erhalten]C - Bei zwei gegebenen Arrays, wie finden Sie die Anzahl der einzelnen Elemente eines Arrays?

int aDupes = 0; 
int bDupes = 0; 
int i, j, k; 

for(i = 0; i < sizeOfA; i++){ 
    for(j = 0; j < sizeOfB; j++){ 
     if(a[i] == b[j]){ 
      bDupes++; 
     } 
    } 
} 
for(i = 0; i < sizeOfA; i++){ 
    for(j = i+1; j < sizeOfA; j++){ 
     for(k = 0; k < sizeOfB; k++){ 
      if(a[i] == a[j] && a[i] == b[k]){ 
       aDupes++; 
      } 
     } 
    } 
} 

So zum Beispiel a [] = {1, 3, 3, 5, 6, 7, 8} b [] = {1, 3, 8, 2} würde aDupes = 1 zurückgeben; bDupes = 4. Die Anzahl der einzigartigen Elemente sollte jedoch 3 (5, 6, 7) sein. Wie kann ich das machen?

+0

auch geben, wenn jemand Rat bei der Rückkehr ein dynamisches Array dieser einzigartigen Werte geben kann ich es sehr sehr schätzen würde. :) – Grum

+2

Sie sollten suchen und lesen über * Set-Operationen *. Suchen Sie für die "eindeutigen" Werte nach * set difference *. –

+0

Subtrahieren Sie 'aDupes' von' bDupes' Sie erhalten alle einzigartigen Elemente des Arrays 'a []' – Nutan

Antwort

0

Verwenden Sie Mapping, es ist einfacher und sehr klar zu verstehen.

Zuerst alle Elemente von array2 abbilden und nach array1 suchen, indem Sie auch die Karte von array1 und so weiter machen.

1
int flag=0,unique=0; 
for(i = 0; i < sizeOfA; i++){ 
for(j = i+1; j < sizeOfA; j++){ 
    for(k = 0; k < sizeOfB; k++){ 
     if(a[i] != a[j] && a[i] != b[k]){ 
      flag++; 
     } 
    } 
} 
if (flag==0){ 
    unique++; 
    } 
flag=0; 
} 

Diese unique Variable wird den Wert der einzigartigen Elemente des Arrays a

Verwandte Themen