比较两组整数是否有相同的元素,每组整数个数不超过100。若有相同的元素,则按照由大到小的顺序输出相同的元素(重复出现的元素只输出一个)
时间: 2024-09-30 16:05:57 浏览: 40
比较两组整数是否有相同的元素,并按从大到小的顺序输出,可以采用以下步骤:
1. 分别创建两个容器(例如`std::vector`),用于存储每一组的整数。
2. 遍历每组的整数,将它们加入对应的容器中,同时使用一个集合(如`std::unordered_set`)来记录已经遇到过的元素,这样可以保证不会重复插入。
3. 对两个容器进行交集操作,得到共有的元素。
4. 对交集进行排序,由于题目要求从大到小,我们可以先创建一个自定义的比较器,然后对交集进行降序排序。
5. 输出排序后的元素。
以下是C++代码示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>
bool compare(const int &a, const int &b) {
return a > b;
}
void find_and_output_common(int arr1[], int size1, int arr2[], int size2) {
std::vector<int> vec1(size1), vec2(size2);
std::unordered_set<int> seen1, seen2;
// 将两个数组的元素分别存入对应的容器中
for (int i = 0; i < size1; ++i) {
vec1[i] = arr1[i];
seen1.insert(arr1[i]);
}
for (int i = 0; i < size2; ++i) {
vec2[i] = arr2[i];
seen2.insert(arr2[i]);
}
// 获取两个容器的交集,存储在另一个容器中并排序
std::vector<int> common = vec1;
common.erase(std::remove_if(common.begin(), common.end(), [&seen1](int num) { return !seen1.count(num); }), common.end());
std::sort(common.begin(), common.end(), compare);
// 输出相同的元素(从大到小)
for (const auto &num : common)
std::cout << num << " ";
std::cout << std::endl;
}
int main() {
int arr1[] = {5, 3, 8, 1, 9, 2};
int arr2[] = {2, 1, 7, 9, 4, 6};
int size1 = sizeof(arr1) / sizeof(arr1[0]);
int size2 = sizeof(arr2) / sizeof(arr2[0]);
find_and_output_common(arr1, size1, arr2, size2);
return 0;
}
```
阅读全文