C语言:计算两个集合的并集

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NUMBER1 7
#define NUMBER2 5
void createCollect(int [],int);
void display(int [],int);
int main()
{
	int	collection1[NUMBER1];
	int collection2[NUMBER2];
	int collection3[NUMBER1+NUMBER2];
 	int i,j,label=0;
	createCollect(collection1,NUMBER1);   
	
	for(j = 0;j < NUMBER2;j++)
	{
		collection2[j]=j*2;
	}
	
	printf("集合1:"); 
	display(collection1,NUMBER1);
	
	printf("集合2:");    
	display(collection2,NUMBER2);
	
	for(i = 0; i < NUMBER1;i++)
	{
		//从集合1中取出元素,去遍历集合2中的所有元素 
		for(j = 0;j < NUMBER2;j++)
		{
			//如果相同则跳出遍历 
			if(collection1[i]==collection2[j])
				break;			
		}
		//判断:此时存在两种情况1) 当前集合1的元素与集合2的元素相同
		//2)遍历完了集合2的数组后不存在相同的元素 
		if(j == NUMBER2)
		{
			collection3[label]=collection1[i];
			label++;
		}
						
	}
	
	//把集合2的所有元素存进collection3中 
	for(j = 0;j < NUMBER2;j++)
	{
		collection3[label++]=collection2[j];
	}
	
	printf("集合1与集合2的并集为:\n");
	display(collection3,label);
			
	return 0;
}
//随机生成一个不含重复元素的数组 
void createCollect(int num[],int count)
{		
	//randValue:临时随机数存放变量 
	//condition:循环生成不重复的条件 
	int i,j,randValue,condition;
	srand(time(NULL));
	for(i=0;i<count;i++)
    {
    	condition=1;
        while(condition){
        	randValue=1+(int)rand()%10;
        	for(j = 0;j <= i;j++){
        		if(i==0){//第一个数不可能存在重复数,可以直接赋值 
        			condition=0;
					break;
		        }
	        	if(randValue==num[j])
	        		break;
        		if(randValue!=num[j]&&j==i-1)//当生成的随机数与当前数组最后一位不同并且下标相等时 
        		{	
		       		condition=0;
					break;	
		        }			
	        }
        }
        num[i]=randValue;
    }
}
//打印数组 
void display(int num[],int count)
{
    int i;
    for(i=0;i<count;i++)
    {
         printf("%d\t",num[i]);
    }
    printf("\n");
}
并集的计算,在交集的基础上修改两处即可。有什么不足之处请拍砖....

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值