两个集合的交并差

来源:互联网 发布:java反序列化漏洞扫描 编辑:程序博客网 时间:2024/04/30 06:58

两个集合的交并差

#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;

}


原创粉丝点击