loj集合操作

来源:互联网 发布:yum install gcc 编辑:程序博客网 时间:2024/06/10 14:35
问题描述  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。输入格式  第一行为一个整数n,表示集合A中的元素个数。  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。  第三行为一个整数m,表示集合B中的元素个数。  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。  集合中的所有元素均为int范围内的整数,n、m<=1000。输出格式  第一行按从小到大的顺序输出A、B交集中的所有元素。  第二行按从小到大的顺序输出A、B并集中的所有元素。  第三行按从小到大的顺序输出B在A中的余集中的所有元素。样例输入51 2 3 4 552 4 6 8 10样例输出2 41 2 3 4 5 6 8 101 3 5样例输入41 2 3 435 6 7样例输出1 2 3 4 5 6 71 2 3 4

解法.可以直接使用c++stl库简单快捷
此处,简单的实现了集合,用线性表结构

#include
#include
#include
#define size 300+10
int cmp(const void* p,const void * q){
 int a=*((int*)p);
 int b=*((int*)q);
 return a>b;
}

int union_set(int s1[],int l1,int s2[],int l2,ints3[],int *l3){
 int le1=0,le2=0,le3=0;
 while(le1
  if(s1[le1]
   s3[le3++]=s1[le1++];
  }elseif(s1[le1]==s2[le2]){
   s3[le3++]=s2[le2++];
   le1++;
  }else{
   s3[le3++]=s2[le2++];
  }
 }
 while(le1
  s3[le3++]=s1[le1++];
 }
 while(le2
  s3[le3++]=s2[le2++];
 }
 *l3=le3;
 return le3;
}
void sub_set(int s1[],int l1,int s2[],int l2,int s3[],int*l3){
 int le1=0;
 int le2=0;
 int le3=0;
 while(le1
  if(s1[le1]
   le1++;
  }elseif(s1[le1]==s2[le2]){
   s3[le3++]=s2[le2++];
   le1++;
  }else{
   le2++;
  }
 }
 *l3=le3;
}

int insert_set(int s[],int *l,int val){
 int i=0;
 for(i=*l-1;i>=-1;i--){
  if(i==-1){
   s[0]=val;
   (*l)++;
   return*l;
  }
  if(val
   s[i+1]=s[i];
  }else if(s[i]==val){
    break;
  }else{
   s[i+1]=val;
   (*l)++;
   break;
  }
 }
 return *l;
}
void different_set(int s1[],int l1,int s2[],int l2,int s3[],int*l3){
 int le1=0;
 int le2=0;
 int le3=0;
 while(le1
  if(s1[le1]
   s3[le3++]=s1[le1++];
  }elseif(s1[le1]==s2[le2]){
   le1++;
   le2++;
  }else{
   le2++;
  }
 }
 while(le1
  s3[le3++]=s1[le1++];
 }
 *l3=le3;
}
void show_set(int s[],int l){
 int i;
 qsort(s,l,sizeof(s[0]),cmp);
 for(i=0;i
  printf("%d ",s[i]);
 }
 if(l>0)
 printf("\n");
}
int main(){
 int s1[size];
 int l1=0;
 int s2[size];
 int l2=0;
 int s3[size];
 int l3;
 int i;
 scanf("%d",&l1);
 for(i=0;i
  scanf("%d",&s1[i]);
 scanf("%d",&l2);
 for(i=0;i
  scanf("%d",&s2[i]);
 union_set(s1,l1,s2,l2,s3,&l3);
 show_set(s3,l3);
 sub_set(s1,l1,s2,l2,s3,&l3);
 show_set(s3,l3);
 different_set(s1,l1,s2,l2,s3,&l3);
 show_set(s3,l3);
 return 0;
}

0 0
原创粉丝点击