C++从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复),编程求两组整数的交集,即在两组整数中都出现的整数,并按从大到小顺序排序输出。若交集为空,则什么都不输出。
时间: 2024-10-07 20:00:46 浏览: 27
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),合并两组整数,去掉在两组整数中都出现的整数,并按从大到小顺序排序输出(即两组整数集"异或
在C++中,你可以通过以下步骤实现这个功能:
1. 首先,创建两个vector容器,分别用于存储第一组和第二组整数。由于题目要求不超过20个且不重复,可以使用set数据结构,因为set自动保证了元素唯一。
```cpp
#include <iostream>
#include <set>
#include <algorithm>
std::set<int> firstSet;
std::set<int> secondSet;
// 读取一组整数并添加到对应的set中
void readAndAdd(int groupIndex) {
int num;
while (std::cin >> num && groupIndex == 1 || groupIndex == 2) { // 只读取两组
if (groupIndex == 1)
firstSet.insert(num);
else
secondSet.insert(num);
}
}
```
2. 定义一个函数来计算交集,并将结果转换回vector,以便后续排序:
```cpp
std::vector<int> findIntersection() {
std::vector<int> intersection;
for (int i : firstSet)
if (secondSet.find(i) != secondSet.end())
intersection.push_back(i);
return intersection;
}
// 使用STL算法sort对结果进行降序排序
void sortAndOutput(std::vector<int>& intersection) {
std::sort(intersection.begin(), intersection.end(), std::greater<int>());
if (!intersection.empty()) {
for (const auto& num : intersection)
std::cout << num << " ";
}
}
```
3. 主函数中调用上述函数并处理输出:
```cpp
int main() {
readAndAdd(1);
readAndAdd(2);
std::vector<int> intersection = findIntersection();
sortAndOutput(intersection);
return 0;
}
```
当运行程序时,它会首先从标准输入中读取两组整数,然后找出它们的交集并按照从大到小的顺序输出。如果交集为空,那么就不会有任何输出。
阅读全文