1. 程式人生 > >set(集合)的應用

set(集合)的應用

 1 //演算法筆記STL部分set篇 
 2 #include<cstdio>
 3 #include<set>
 4 const int N = 50;
 5 using namespace std;
 6 set<int> st[N];                          //定義一個集合陣列 
 7 void compare(int x, int y)               //輸出st[x]與st[y]交集與並集的比率 
 8 {
 9     int difNum = st[x].size();                                                      //
1.定義difNum與sameNum,代表兩個集合中不同的元素(初始化為x中元素個數)與相同的元素(初始化為0) 10 int sameNum = 0; 11 for(set<int>::iterator it = st[y].begin(); it != st[y].end(); it++) //2.使用迭代器遍歷 y集合中的元素 ,使用find()函式在x集合中尋找迭代器所指向的元素,如果相同sameNum++,否則difNum++
12 { 13 if(st[x].find(*it) == st[x].end()) 14 difNum++; 15 else 16 sameNum++; 17 } 18 printf("%.1lf%%", sameNum * 100.00 / difNum); //3.通過sameNum與difNum計算並輸出比率 19 int main() 20 { 21 int n, count, vuale, T, s1, s2;
22 scanf("%d", &n); //n為集合的個數 23 for(int i = 1; i <= n; i++) //為每個集合的元素賦值 24 { 25 scanf("%d", &count); 26 for(int j = 0; j < count; j++) 27 { 28 scanf("%d", &vuale); 29 st[i].insert(vuale); 30 } 31 } 32 scanf("%d", &T); //T為測試的組數 33 for(int i = 0; i < T; i++) //為每組測試選定2個集合 34 { 35 scanf("%d%d", &s1, &s2); 36 compare(s1, s2); 37 } 38 }