[C_ST82-易] 交集
問題描述 :
交集:由幾個集合的共同元素所形成的集合,稱為這幾個集合的交集,由 A 、 B 兩集合的共同元素所形成的交集以 A ∩ B 表之。
範例 :
A 、 B 分別為兩個集合,集合裏有不同的元素,如下列所示,求出其交集之集合內容 :
A = 1,2,3,5,8,13
B = 1,2,4,6,8,10
交集: 1 2 8
求輸入任 2 個集分別為合 A 集合及 B 集合,求其交集 ?
輸入說明 :
輸入兩列的數字代表 A 及 B 兩集合,第一列為 A 集合,第一列為 B 集合,每一列集合中的元素以逗號分隔開來。
例如:
輸入 2 列字串 ( 第一列為 A 集合,第一列為 B 集合 ) :
1,3,5,7,9,11
2,3,4,5,6,8,10
輸出說明 :
輸出 A 及 B 兩集合之交集 , 輸出元素以空白分隔開來, 須按照小到大排列 . 若空集合則輸出 null
例如:
按照小到大排列 輸出為:
3, 5
範例 :
交集:由幾個集合的共同元素所形成的集合,稱為這幾個集合的交集,由 A 、 B 兩集合的共同元素所形成的交集以 A ∩ B 表之。
範例 :
A 、 B 分別為兩個集合,集合裏有不同的元素,如下列所示,求出其交集之集合內容 :
A = 1,2,3,5,8,13
B = 1,2,4,6,8,10
交集: 1 2 8
求輸入任 2 個集分別為合 A 集合及 B 集合,求其交集 ?
輸入說明 :
輸入兩列的數字代表 A 及 B 兩集合,第一列為 A 集合,第一列為 B 集合,每一列集合中的元素以逗號分隔開來。
例如:
輸入 2 列字串 ( 第一列為 A 集合,第一列為 B 集合 ) :
1,3,5,7,9,11
2,3,4,5,6,8,10
輸出說明 :
輸出 A 及 B 兩集合之交集 , 輸出元素以空白分隔開來, 須按照小到大排列 . 若空集合則輸出 null
例如:
按照小到大排列 輸出為:
3, 5
範例 :
輸入範例 | 輸出範例 |
1,3,5,7,9,11 2,3,4,5,6,8,10 | 3 5 |
1,3,5,7,9 2,4,6,8,10 | null |
33,26,11,45,86,57 11,22,33,45,77,98 | 11 33 45 |
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <algorithm>
- using namespace std;
- int main() {
- // [C_ST82-易] 交集
- // g++(c++11)
- string A, B;
- cin >> A >> B;
- int i_A[1000000];
- int i_B[1000000];
- //切割字串A
- stringstream ssa(A);
- string token;
- int countA = 0;
- while (getline(ssa, token, ','))
- {
- i_A[countA] = stoi(token);
- countA++;
- }
- //切割字串B
- stringstream ssb(B);
- int countB = 0;
- while (getline(ssb, token, ','))
- {
- i_B[countB] = stoi(token);
- countB++;
- }
- int fin[countA+countB];
- fill(fin, fin+countA+countB,0);
- bool exist = false;
- int fpos = 0;
- for(int i = 0;i < countA;i++)
- {
- for(int j = 0;j < countB;j++)
- {
- if(i_A[i] == i_B[j])
- {
- exist = true;
- }
- }
- if(exist == true)//不重複就放入fin
- {
- fin[fpos] = i_A[i];
- fpos++;
- }
- exist = false;
- }
- if(fpos == 0)
- {
- cout << "null" << endl;
- }
- else
- {
- sort(fin, fin+fpos);
- for(int i = 0;i < fpos;i++)
- {
- if(i != fpos-1)
- {
- cout << fin[i] << " ";
- }
- else
- {
- cout << fin[i] << endl;
- }
- }
- }
- return 0;
- }
沒有留言:
張貼留言