用c语言求两个集合并集,交集,差集A-B - 爱问答

(爱问答)

用c语言求两个集合并集,交集,差集A-B

你的要求不详细(没有输入/输出要求),这个以属于基础的算法了,且网上多了,以下是其中之一

问题描述

  给出两个整数集合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


/*
   B在A中的余集:表示A中有B中没有的元素。
*/
#include<stdio.h>
#include<string.h>
#define max 1000
int jiao[max]={0},bing[max+max]={0},yu[max]={0},all[max+max]={0};//分别表交集、并集、余集、和集
int lena,lenb;//a和b数组的长度
void MPup(int a[],int len){//冒泡升序
   for(int i=0; i<len-1; i++){
       for(int j=0; j<len-1-i; j++){
           if(a[j]>a[j+1]){
               int t = a[j];
               a[j] = a[j+1];
               a[j+1] = t;
           }
       }
   }
}
void showjiao(int all[],int len){
   int index=0;//下标
   for(int i=0;i<len;i++){
       if(all[i+1] == all[i]){//如果当前遍历的元素和前一个元素相等
           jiao[index++] = all[i];//存到bing中
       }
   }
   for(int i=0;i<index;i++){
       printf("%d ",jiao[i]);
   }
}
void showbing(int all[],int len){//求并集
   int index=1;//下标
   bing[0] = all[0];
   for(int i=1;i<len;i++){
       if(all[i] != all[i-1]){//如果当前遍历的元素和前一个元素不相等
           bing[index++] = all[i];//存到bing中
       }
   }
   for(int i=0;i<index;i++){
       printf("%d ",bing[i]);
   }
}
void showyu(int a[],int b[]){
   int index=0;//表索引  
   for(int i=0;i<lena;i++)  
   {  
       int count=0;
       for(int j=0;j<lenb;j++)  
           if(a[i]!=b[j])  
               count++;  
       if(count==lenb)
           yu[index++]=a[i];  
   }  
   
   for(int i=0;i<index;i++){
       printf("%d ",yu[i]);
   }
}
int main(){
   scanf("%d",&lena);
   int a[lena];
   for(int i=0;i<lena;i++){
       scanf("%d",&a[i]);
       all[i]=a[i];
   }
   MPup(a,lena);//a排序
   scanf("%d",&lenb);
   int b[lenb];
   for(int i=0;i<lenb;i++){
       scanf("%d",&b[i]);
       all[lena+i]=b[i];
   }
   MPup(b,lenb);//b排序
   MPup(all,lena+lenb);//和集排序
   showjiao(all,lena+lenb);//求交集
   printf(" ");
   showbing(all,lena+lenb);//求并集
   printf(" ");
   showyu(a,b);//求余集
   return 0;
}


相关标签:c语言

下一篇:页面为什么出现downloaddrivers

上一篇:定义一个一维数组sine,索引范围为(0to255)

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?