2016-10-03 2 views
2

집합 (배열)에서 하나의 개체를 건너 뜁니다.C에서 두 세트의 조합과 XOR

연타 -ggdb3 -O0 -std = C99 - 벽을 prog.c -Werror -o PROG

출력 :

의 배타적 OR (XOR) 및 B : 1 9 10 (그러나해야 수 : 1 2 9 10)

연합 (EU) (A)의 및 B : 1 3 6 9 10 (하지만 그것이 있어야 :

이 프로그램에 어떤 문제가 2 3 6 9 10) 1? 도와주세요!

#include <stdio.h> 

int main(void) 
{ 
int U[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int A[] = {2, 3, 6, 9}; 
int B[] = {1, 3, 6, 10}; 

int SizeOfU = sizeof(U)/sizeof(int); 
int SizeOfA = sizeof(A)/sizeof(int); 
int SizeOfB = sizeof(B)/sizeof(int); 

printf("Exclusive or (XOR) of A and B: "); 
for (int i = 0; i < SizeOfU; i++) 
{ 
    for (int j = 0; j < SizeOfB; j++) 
    { 
     if ((A[j] != B[j]) && ((U[i] == A[j]) || (U[i] == B[j]))) 
     { 
      printf("%i ", U[i]); 
      i++; 
      j = 0; 
     } 
    } 
} 
printf("\n"); 

printf("Union of A and B: "); 
for (int i = 0; i < SizeOfU; i++) 
{ 
    for (int j = 0; j < SizeOfA; j++) 
    { 
     if ((U[i] == A[j]) || (U[i] == B[j])) 
     { 
      printf("%i ", U[i]); 
      j = 0; 
      i++; 
     } 
    } 
} 
printf("\n"); 

return 0; 
} 
+0

배열'A'와'B'의 교차 또는 교차를 설정하려고합니다. 그렇다면'U' 배열은 무엇을 위해 사용되어야합니까? 세트 노조에 대해 같은 질문이 있습니까? – selbie

+0

다른 프로그램의 일부입니다. – PoorProgrammer

+0

그러나 여전히 코드에서'U' 배열을 참조합니다. 3 방향 XOR이나 다른 것을하려고하는지 확신 할 수 없습니다. 질문과 코드를 모두 업데이트 할 수 있습니까? – selbie

답변

1

귀하의 논리는 여러 가지 이유 때문에 어려움을 겪습니다. 정수 값이 A와 B의 같은 인덱스에 있다고 가정합니다. A의 길이가 B보다 작은 경우 실제로는 B를 평가할뿐입니다.

XOR의 경우, 이런 식으로 : U의 모든 항목의 경우, A 또는 B에 표시되는 항목 있지만 둘을 찾을 :

for (int u = 0; i < SizeOfU; u++) 
{ 
    int inA = 0; 
    int inB = 0; 
    for (int a = 0; a < SizeOfA; a++) 
    { 
     inA = (A[a] == U[u]); 
     if (inA) 
     { 
      break; 
     } 
    } 

    for (int b = 0; b < SizeOfB; b++) 
    { 
     inB = (B[b] == U[u]); 
     if (inB) 
     { 
      break; 
     } 
    } 

    if ((inA && !inB) || (!inA && inB)) 
    { 
     printf("%d", i); 
    } 
} 
printf("\n"); 

이는 XOR 세트 케이스를 해결한다. OR 사례에 대한 해결책을 당신을위한 운동으로 남겨 둘 것입니다.