ABOUT ME

Today
Yesterday
Total
  • 합집합 && 교집합 && 차집합
    코딩/C언어 2018. 9. 27. 15:42
    반응형

    #include <stdio.h>

    #include <stdlib.h>

     

    #define MAX_SET_SIZE 10

    #define HAVE_ELEMENT 1

    #define DO_NOT_HAVE_ELEMENT 0

     

    int hasElement(int set[], int size, int element);

    int setUnion(int set1[], int size1, int set2[], int size2, int setResult[]);

    int setIntersecton(int set1[], int size1, int set2[], int size2, int setResult[]);

    int setComplements(int set1[], int size1, int set2[], int size2, int setResult[]);

    void printSet(int set[], int size);

    int addOneElement(int set[], int size, int element);

     

    int main(int argc, char *argv[])

    {

    int i;

     

    int setA[MAX_SET_SIZE];

    int setB[MAX_SET_SIZE];

    int setC[MAX_SET_SIZE * 2];

     

    int sizeA;

    int sizeB;

    int sizeC;

     

    printf("Enter the size of Set A:");

    scanf("%d", &sizeA);

    i = 0;

    while (i < sizeA)

    {

    printf("Enter the number for Set A (%d/%d):", i + 1, sizeA);

    scanf("%d", &setA[i]);

    i = addOneElement(setA, i, setA[i]);

    }

     

    printf("Enter the size of Set B:");

    scanf("%d", &sizeB);

    i = 0;

    while (i < sizeB)

    {

    printf("Enter the number for Set B (%d/%d):", i + 1, sizeB);

    scanf("%d", &setB[i]);

    i = addOneElement(setB, i, setB[i]);

    }

     

    printf("Set A: ");

    printSet(setA, sizeA);

    printf("Set B: ");

    printSet(setB, sizeB);

     

    sizeC = setUnion(setA, sizeA, setB, sizeB, setC); // Union, setC is the result set

    printf("Union of setA and setB: ");

    printSet(setC, sizeC);

     

    sizeC = setIntersecton(setA, sizeA, setB, sizeB, setC); //Intersection, setC is the result set

    printf("Intersection of setA and setB: ");

    printSet(setC, sizeC);

     

    sizeC = setComplements(setA, sizeA, setB, sizeB, setC); //Complements, setC is the result set

    printf("Set-theoretic difference of setA and setB (setA - setB): ");

    printSet(setC, sizeC);

     

    return 0;

    }

     

    // If the set has the element, returns 1;

    // else return 0;

    int hasElement(int set[], int size, int element)

    {

    int i = 0;

    for (i = 0; i < size; i++)

    if (set[i] == element)

    return HAVE_ELEMENT; // we found it!

     

    return DO_NOT_HAVE_ELEMENT;

    }

     

    // 원소를 집합에 추가. 이미 존재하면 추가하지 않고 redundant라고 출력한다. 현재의 집합 크기를 반환한다.

    int addOneElement(int set[], int size, int element)

    {

    if (hasElement(set, size, element) == DO_NOT_HAVE_ELEMENT)

    {

    set[size] = element;

    size++;

    }

    else

    printf("It is redundant. Please retry.\n");

    return size;

    }

     

    void printSet(int set[], int size)

    {

    int i = 0;

    printf("{ ");

    for (i = 0; i < size; i++)

    if (i < size - 1)

    printf("%d, ", set[i]);

    else

    printf("%d ", set[i]);

     

    printf("}\n");

    }

     

    int setUnion(int set1[], int size1, int set2[], int size2, int setResult[])

    {

    int i, j, n = 0, result = 0;

     

    for (i = 0; i < size1; i++)

    {

    for (j = 0; j < n; j++)

    if (set1[i] == setResult[j])

    result = 1;

     

    if (result != 1)

    {

    setResult[n] = set1[i];

     

    n++;

    }

     

    result = 0;

    }

     

    for (i = 0; i < size2; i++)

    {

    for (j = 0; j < n; j++)

    if (set2[i] == setResult[j])

    result = 1;

     

    if (result != 1)

    {

    setResult[n] = set2[i];

     

    n++;

    }

     

    result = 0;

    }

     

    return n;

    }

     

    int setIntersecton(int set1[], int size1, int set2[], int size2, int setResult[])

    {

    int i, j, n = 0;

     

     

    for (i = 0; i < size1; i++)

    {

    for (j = 0; j < size2; j++)

    if (set1[i] == set2[j])

    {

    setResult[n] = set1[i];

     

    n++;

    }

    }

     

    return n;

    }

     

    int setComplements(int set1[], int size1, int set2[], int size2, int setResult[])

    {

    int i, j, n = 0, result = 0;

     

     

    for (i = 0; i < size1; i++)

    {

    for (j = 0; j < size2; j++)

    if (set1[i] == set2[j])

    result = 1;

     

    if (result != 1)

    {

    setResult[n] = set1[i];

     

    n++;

    }

     

    result = 0;

    }

     

    return n;

    }

     

     

    결과:

     

     

    반응형

    '코딩 > C언어' 카테고리의 다른 글

    제곱 구하기 (재귀함수)  (0) 2019.03.18
    지뢰찾기 (中 폭탄 수 세기)  (0) 2019.03.18
    값 탐색 && 가장 큰 수 && 총 합  (0) 2018.09.27
    좌석 예약  (0) 2018.09.27
    집합이 같은지 비교  (0) 2018.09.27
Designed by Tistory.