1. 程式人生 > >C語言:計算兩個集合的交集

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;
	//隨機生成集合1的元素 
	createCollect(collection1,NUMBER1);   
	
	//生成集合2的元素 
	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(collection1[i]==collection2[j])
		{
			collection3[label]=collection1[i];
			label++;
		}
						
	}
	
	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");
}

在這例子中,兩個集合都是生成不重複的元素;

並集與交集的內容有相似之處,只修改兩處,待續,有什麼不足之處請拍磚....在生成陣列時,假如想重用createCollect(),應該怎麼寫?因為現在這樣用的話會生成相同的內容.