C語言:計算兩個集合的交集
阿新 • • 發佈:2019-02-17
#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(),應該怎麼寫?因為現在這樣用的話會生成相同的內容.