問題描述個人思路:首先對兩個陣列排序;然後直接同時遍歷兩個陣列,比較兩個陣列中元素值大小,做出不同的處理;如果某個陣列有剩餘,需要單獨處理;餘集則利用前面比較元素值中相等情況做的標記進行排除給出兩個整數集合a、b
a、ba、
b,求出他們的交集、並集以及b
bb在a
aa中的餘集。
輸入格式
第一行為乙個整數n
nn,表示集合a
aa中的元素個數。
第二行有n
nn個互不相同的用空格隔開的整數,表示集合a
aa中的元素。
第三行為乙個整數m
mm,表示集合b
bb中的元素個數。
第四行有m
mm個互不相同的用空格隔開的整數,表示集合b
bb中的元素。
集合中的所有元素均為int
intin
t範圍內的整數,n、m
<
=1000
n、m<=1000
n、m<=1
000。
輸出格式
第一行按從小到大的順序輸出a、b
a、ba、
b交集中的所有元素。
第二行按從小到大的順序輸出a、b
a、ba、
b並集中的所有元素。
第三行按從小到大的順序輸出b
bb在a
aa中的餘集中的所有元素。
樣例輸入
51 2 3 4 5
52 4 6 8 10
樣例輸出
2 41 2 3 4 5 6 8 10
1 3 5
樣例輸入
41 2 3 4
35 6 7
樣例輸出
1 2 3 4 5 6 7
1 2 3 4
#include
#include
using namespace std;
int n, m;
int a[
1005
], b[
1005];
int ans1[
1005
], ans2[
2005];
bool vis[
1005];
intmain()
cin >> m;
for(
int j =
0; j < m;
++j)
sort
(a, a + n)
;sort
(b, b + m)
;int k =
0, h =0;
int i =
0, j =0;
while
(k < n && h < m)
if(a[k]
> b[h]
)//相等則放入交集、並集,並標記a陣列中的元素
if(a[k]
== b[h])}
//b陣列有剩餘
if(k == n && h < m)
}//a陣列有剩餘
if(k < n && h == m)
}//需要判斷一下i是否大於0,如果小於0則說明無交集
if(i >0)
cout << endl;
}//需要判斷一下j是否大於0,如果小於0則說明無並集
if(j >0)
cout << endl;
}//排除相等元素
for(
int x =
0; x < n;
++x)
return0;
}
藍橋杯 演算法訓練 集合運算
演算法訓練 集合運算 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給出兩個整數集合a b,求出他們的交集 並集以及b在a中的餘集。輸入格式 第一行為乙個整數n,表示集合a中的元素個數。第二行有n個互不相同的用空格隔開的整數,表示集合a中的元素。第三行為乙個整數m,表示集合b中的元素個數...
藍橋杯 演算法訓練 集合運算
給出兩個整數集合a b,求出他們的交集 並集以及b在a中的餘集。輸入格式 第一行為乙個整數n,表示集合a中的元素個數。第二行有n個互不相同的用空格隔開的整數,表示集合a中的元素。第三行為乙個整數m,表示集合b中的元素個數。第四行有m個互不相同的用空格隔開的整數,表示集合b中的元素。集合中的所有元素均...
試題 演算法訓練 集合運算 藍橋杯
題目描述 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給出兩個整數集合a b,求出他們的交集 並集以及b在a中的餘集。輸入格式 第一行為乙個整數n,表示集合a中的元素個數。第二行有n個互不相同的用空格隔開的整數,表示集合a中的元素。第三行為乙個整數m,表示集合b中的元素個數。...