pC.NET

Welcome to oscc.kr



 교집합과 합집합 구하기
2020-05-12 10:40:42
Hit : 1207

작성자 : 피시키드
- File #1 : 57.c(1.5 KB), Download : 19

먼저 교집합을 구한다.

그리고 A+B - A∩B를 해서 합집합을 구한다.

 

 

#include <stdio.h> // 교집합과 합집합 구하기 int main() { int i; int j; int k; int tmp; int x[] = {0,2,1,3,5,4,9,7,8,6,10}; int y[] = {0,7,4,8,5,9,14,11,17,19}; int lx; int ly; int in[100]; int un[100]; int incnt = 0; int uncnt = 0; int max = 0; lx = sizeof(x) / sizeof(x[0]) - 1; ly = sizeof(y) / sizeof(y[0]) - 1; // 교집합 구하기 for (i=1;i<=lx;i++) { for (j=1;j<=ly;j++) { if ( x[i] == y[j] ) { incnt = incnt + 1; in[incnt] = x[i]; // 정렬 for (k=incnt;k>1;k--) { if (in[k] < in[k-1]) { tmp = in[k-1]; in[k-1] = in[k]; in[k] = tmp; } }break; } } } printf("Intersect: "); for (i=1;i<=incnt;i++) printf( "%d ", in[i]); printf("\n"); // 합집합 구하기 for (i=1;i<=lx;i++) { un[i] = x[i]; if ( un[i] > max) max = un[i]; } for (;i<=lx+ly;i++) {  un[i] = y[i-lx]; if ( un[i] > max) max = un[i]; } max = max + 1; for (i=lx+1;i<=lx+ly;i++) { for (j=1;j<=incnt;j++) {if ( un[i] == in[j]) { un[i] = max; //삭제를 위해 제일 큰수 + 1 로 마킹 break; } } } uncnt = lx + ly; // 버블 정렬 (max + 1로 마킹된 요소는 맨 뒤로 이동됨) for (i=1;i<=uncnt;i++) { for(j=i;j<=uncnt;j++) { if ( un[i] > un[j]) { tmp = un[i]; un[i] = un[j]; un[j] = tmp; } } } uncnt = lx + ly - incnt; printf("Union: "); for (i=1;i<=uncnt;i++) printf("%d ",un[i]);  return 0; }

 

* 피시키드님에 의해서 게시물 이동되었습니다 (2024-04-26 18:49)

  피시키드
회원님의 소개글이 없습니다.
 6490
 83


최대공약수 구하기(유클리드 호제법)
파스칼의 삼각형

Copyright (C) 1997-2025 All Rights Reserved.

Powered by
DNS server, DNS service 우분투 리눅스 웹서비스 AbuseIPDB Contributor Badge