藍橋杯 演算法訓練 集合運算

2021-09-12 16:49:02 字數 1848 閱讀 4216

問題描述

給出兩個整數集合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中的元素個數。...