zoukankan      html  css  js  c++  java
  • 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("
    ");
    77     showbing(all,lena+lenb);//求并集 
    78     printf("
    ");
    79     showyu(a,b);//求余集
    80     return 0;
    81 }
  • 相关阅读:
    SQL查询SP代码
    MS SQL Server:查询死锁进程(转载)
    批编译、重新编译和计划缓存
    sql like获取以逗号分割的字段内的数据
    SQL Server 2005—数据库管理10个最重要的特点(转载)
    SQL2005数据库镜像配置脚本
    转:SQL 语句优化
    转:SQL SERVER什么时候写日志
    MDX查询几个经典示例
    尾日志备份和时间点还原
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6603555.html
Copyright © 2011-2022 走看看