7-3 集合减法
给定两个非空集合A和B,集合的元素为30000以内的正整数,编写程序求A-B。
输入格式:
输入为三行。第1行为两个整数n和m,分别为集合A和B包含的元素个数,1≤n, m ≤10000。第2行表示集合A,为n个空格间隔的正整数,每个正整数不超过30000。第3行表示集合B,为m个空格间隔的正整数,每个正整数不超过30000。
输出格式:
输出为一行整数,表示A-B,每个整数后一个空格,各元素按递增顺序输出。若A-B为空集,则输出0,0后无空格。
输入样例:
5 5
1 2 3 4 5
3 4 5 6 7
输出样例:
1 2
参考答案
#include <iostream>
#include <set>
#include <vector>
#include <iterator>
#include <algorithm>
int main() {
int n, m; // n 和 m 分别代表集合A和集合B的元素个数
std::cin >> n >> m;
std::set<int> setA, setB; // 使用set来存储集合A和B
// 读取集合A的元素
for (int i = 0, temp; i < n; i++) {
std::cin >> temp;
setA.insert(temp);
}
// 读取集合B的元素
for (int i = 0, temp; i < m; i++) {
std::cin >> temp;
setB.inasert(temp);
}
// 计算集合A - 集合B
std::vector<int> result;
std::set_difference(setA.begin(), setA.end(), setB.begin(), setB.end(), std::back_inserter(result));
// 输出结果
if (result.empty()) {
std::cout << "0";
} else {
for (int num : result) {
std::cout << num << " ";
}
}
return 0;
}