欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。
两个集合的交并差
#include<stdio.h>
#define N 100
void S(int n,int a[]){
int i,j,d;
a[0]=rand()%90+10;
for (i=1;i<n;i++){
d=rand()%90+10;
for (j=0;j<i;j++){
if (d==a[j]){
i--;
break;
}
else a[i]=d;
}
}
}
void output(int n,int a[]){
int i;
for (i=0;i<n;i++)
printf(" %d ",a[i]);
printf("\n");
}
void J(int m,int a[],int n,int b[]){
int i,j,k,s,c[N];
k=0;
for (i=0;i<m;i++){
s=a[i];
for (j=0;j<n;j++){
if (s==b[j])
c[k++]=s;
}}
for (i=0;i<k;i++){
printf(" %d ",c[i]);}
}//交集
void B(int m,int a[],int n,int b[]){
int i,j,k,s,c[N];
int flag=0;
for (i=0;i<m;i++){
c[i]=a[i];
}
k=m;
for (i=0;i<n;i++){
s=b[i];
flag=1;
for (j=0;j<m;j++){
if (s==c[j])
flag=0;
}
if (flag==1)
c[k++]=s;
}
for (i=0;i<k;i++){
printf(" %d ",c[i]);}
}//并集
void C(int m,int a[],int n,int b[]){
int i,j,k,flag;
i=j=0;
while (i<m){
flag=1;
k=a[i];
for (j=0;j<n;j++){
if (k==b[j])
flag=0;
}
if (flag==1)
printf("%d ",k);
i++;
}
}//差集
int main(){
int m,n,a[N],b[N];
scanf("%d",&m);
S(m,a);
output(m,a);
scanf("%d",&n);
S(n,b);
output(n,b);
J(m,a,n,b);
printf("\n");
B(m,a,n,b);
printf("\n");
C(m,a,n,b);
return 0;
}