[C_ST83-易] 聯集
問題描述 :
聯集:由幾個集合的所有元素所形成的集合,稱為這幾個集合的聯集, A 、 B 兩集合的聯集以 A ∪ B 表之。
範例 :
A 、 B 分別為兩個集合,集合裏有不同的元素,如下列所示,求出其聯集之集合內容 :
A = 1,3,5,7,9
B = 1,2,3,4,6,8,10
聯集: 1 2 3 4 5 6 78 9 10
求輸入任 2 個集分別為合 A 集合及 B 集合,求其聯集 ?
輸入說明 :
輸入兩列的數字代表 A 及 B 兩集合,第一列為 A 集合,第一列為 B 集合,每一列集合中的元素以逗號分隔開來。
例如:
輸入 2 列字串 ( 第一列為 A 集合,第一列為 B 集合 ) :
1,3,5,7,9
1,2,3,4,6,8,10
輸出說明 :
輸出 A 及 B 兩集合之 聯 集 , 輸出元素以空白分隔開來, 須按照小到大排列 . 若空集合則輸出 null
例如:
按照小到大排列 輸出為:
1 2 3 4 5 6 7 8 9 10
範例 :
聯集:由幾個集合的所有元素所形成的集合,稱為這幾個集合的聯集, A 、 B 兩集合的聯集以 A ∪ B 表之。
範例 :
A 、 B 分別為兩個集合,集合裏有不同的元素,如下列所示,求出其聯集之集合內容 :
A = 1,3,5,7,9
B = 1,2,3,4,6,8,10
聯集: 1 2 3 4 5 6 78 9 10
求輸入任 2 個集分別為合 A 集合及 B 集合,求其聯集 ?
輸入說明 :
輸入兩列的數字代表 A 及 B 兩集合,第一列為 A 集合,第一列為 B 集合,每一列集合中的元素以逗號分隔開來。
例如:
輸入 2 列字串 ( 第一列為 A 集合,第一列為 B 集合 ) :
1,3,5,7,9
1,2,3,4,6,8,10
輸出說明 :
輸出 A 及 B 兩集合之 聯 集 , 輸出元素以空白分隔開來, 須按照小到大排列 . 若空集合則輸出 null
例如:
按照小到大排列 輸出為:
1 2 3 4 5 6 7 8 9 10
範例 :
輸入範例 | 輸出範例 |
1,3,5,7,9 2,4,6,8,10 | 1 2 3 4 5 6 7 8 9 10 |
7,3,5,8,15 11, 9,7,6,8,10 | 3 5 6 7 8 9 10 11 15 |
33,15,37,91 11,31,6,9,12,88 | 6 9 11 12 15 31 33 37 91 88 |
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <algorithm>
- using namespace std;
- int main() {
- // [C_ST83-易] 聯集
- // 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++;
- }
- if(countA + countB == 0)
- {
- cout << "null" << endl;
- }
- else
- {
- int fin[countA+countB];
- fill(fin, fin+countA+countB,0);
- bool exist = true;
- int fpos = 0;
- //A跟fin比對
- for (int i = 0; i < countA; i++)
- {
- for(int j = 0;j < countA+countB;j++)
- {
- if(i_A[i] == fin[j])//如果存在在fin就false
- {
- exist = false;
- }
- }
- if(exist == true)//不存在在fin就放入fin
- {
- fin[fpos] = i_A[i];
- fpos++;
- }
- exist = true;
- }
- //B跟fin比對
- for (int i = 0; i < countB; i++)
- {
- for(int j = 0;j < countA+countB;j++)
- {
- if(i_B[i] == fin[j])//如果存在在fin就false
- {
- exist = false;
- }
- }
- if(exist == true)//不存在在fin就放入fin
- {
- fin[fpos] = i_B[i];
- fpos++;
- }
- exist = true;
- }
- 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;
- }
沒有留言:
張貼留言