C語言 · 集合運算


算法訓練 集合運算  
時間限制:1.0s   內存限制:512.0MB
  
問題描述
  給出兩個整數集合A、B,求出他們的交集、並集以及B在A中的余集。
輸入格式
  第一行為一個整數n,表示集合A中的元素個數。
  第二行有n個互不相同的用空格隔開的整數,表示集合A中的元素。
  第三行為一個整數m,表示集合B中的元素個數。
  第四行有m個互不相同的用空格隔開的整數,表示集合B中的元素。
  集合中的所有元素均為int范圍內的整數,n、m<=1000。
輸出格式
  第一行按從小到大的順序輸出A、B交集中的所有元素。
  第二行按從小到大的順序輸出A、B並集中的所有元素。
  第三行按從小到大的順序輸出B在A中的余集中的所有元素。
樣例輸入
5
1 2 3 4 5
5
2 4 6 8 10
樣例輸出
2 4
1 2 3 4 5 6 8 10
1 3 5
樣例輸入
4
1 2 3 4
3
5 6 7
樣例輸出
1 2 3 4 5 6 7
1 2 3 4
 
 1 /*
 2     B在A中的余集:表示A中有B中沒有的元素。 
 3 */
 4 #include<stdio.h>
 5 #include<string.h>
 6 #define max 1000
 7 int jiao[max]={0},bing[max+max]={0},yu[max]={0},all[max+max]={0};//分別表交集、並集、余集、和集 
 8 int lena,lenb;//a和b數組的長度 
 9 void MPup(int a[],int len){//冒泡升序 
10     for(int i=0; i<len-1; i++){
11         for(int j=0; j<len-1-i; j++){
12             if(a[j]>a[j+1]){
13                 int t = a[j];
14                 a[j] = a[j+1];
15                 a[j+1] = t;
16             }
17         }
18     }
19 }
20 void showjiao(int all[],int len){
21     int index=0;//下標 
22     for(int i=0;i<len;i++){
23         if(all[i+1] == all[i]){//如果當前遍歷的元素和前一個元素相等
24             jiao[index++] = all[i];//存到bing中 
25         }
26     }
27     for(int i=0;i<index;i++){
28         printf("%d ",jiao[i]);
29     }
30 }
31 void showbing(int all[],int len){//求並集 
32     int index=1;//下標 
33     bing[0] = all[0];
34     for(int i=1;i<len;i++){
35         if(all[i] != all[i-1]){//如果當前遍歷的元素和前一個元素不相等
36             bing[index++] = all[i];//存到bing中 
37         }
38     }
39     for(int i=0;i<index;i++){
40         printf("%d ",bing[i]);
41     }
42 }
43 void showyu(int a[],int b[]){
44     int index=0;//表索引   
45     for(int i=0;i<lena;i++)  
46     {  
47         int count=0;
48         for(int j=0;j<lenb;j++)  
49             if(a[i]!=b[j])  
50                 count++;  
51         if(count==lenb) 
52             yu[index++]=a[i];  
53     }  
54     
55     for(int i=0;i<index;i++){
56         printf("%d ",yu[i]);
57     }
58 }
59 int main(){
60     scanf("%d",&lena);
61     int a[lena];
62     for(int i=0;i<lena;i++){
63         scanf("%d",&a[i]);
64         all[i]=a[i];
65     }
66     MPup(a,lena);//a排序 
67     scanf("%d",&lenb);
68     int b[lenb];
69     for(int i=0;i<lenb;i++){
70         scanf("%d",&b[i]);
71         all[lena+i]=b[i];
72     }
73     MPup(b,lenb);//b排序 
74     MPup(all,lena+lenb);//和集排序 
75     showjiao(all,lena+lenb);//求交集 
76     printf("\n");
77     showbing(all,lena+lenb);//求並集 
78     printf("\n");
79     showyu(a,b);//求余集
80     return 0;
81 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM