
Вопрос задан 28.03.2021 в 05:33.
Предмет Информатика.
Спрашивает Шилович Татьяна.
Курсовая работа на тему:ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С/С++: Дан целочисленный массив.
преобразовать массив таким образом,чтобы а нам остались значения,повторяющиеся дважды ПОМОГИТЕ ПОЖАЛУЙСТА ДАЮ 185 БАЛЛОВ

Ответы на вопрос

Отвечает Андреева Нина.
Используя boost библиотеку можно было это сделать ещё проще (нужно заканчивать баловаться boost'ом, ато совсем мозги атрофируются :D). Если посидеть и подумать чуть дольше 5 минут, можно и это решение улучшить, но оставлю это Вам)
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <unordered_map>
using namespace std;
unordered_map<int, size_t> umap;
void KeepDuplicates(vector<int>& v)
{
vector<int> tmp(v);
for (size_t i = 0; i < tmp.size(); ++i)
{
unordered_map<int, size_t>::iterator pos = umap.find(tmp[i]);
if (pos->second != 2)
{
auto it = remove(v.begin(), v.end(), pos->first);
v.resize(it - v.begin());
}
}
}
int main()
{
vector<int> arr = { 3, 2, 3, 6, 2, 7, 5, 6, 9, 2 };
for (const auto& i : arr) ++umap[i];
KeepDuplicates(arr);
copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, " "));
}
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <unordered_map>
using namespace std;
unordered_map<int, size_t> umap;
void KeepDuplicates(vector<int>& v)
{
vector<int> tmp(v);
for (size_t i = 0; i < tmp.size(); ++i)
{
unordered_map<int, size_t>::iterator pos = umap.find(tmp[i]);
if (pos->second != 2)
{
auto it = remove(v.begin(), v.end(), pos->first);
v.resize(it - v.begin());
}
}
}
int main()
{
vector<int> arr = { 3, 2, 3, 6, 2, 7, 5, 6, 9, 2 };
for (const auto& i : arr) ++umap[i];
KeepDuplicates(arr);
copy(arr.begin(), arr.end(), ostream_iterator<int>(cout, " "));
}



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Конечно, я могу помочь. Вот пример кода на языке C++, который преобразует целочисленный массив таким образом, чтобы в нем остались только значения, повторяющиеся дважды:
cpp#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
vector<int> removeNonDuplicates(vector<int> nums) {
unordered_map<int, int> numMap;
for (int num : nums) {
numMap[num]++;
}
vector<int> result;
for (auto& it : numMap) {
if (it.second == 2) {
result.push_back(it.first);
}
}
return result;
}
int main() {
int nums[] = {1, 2, 2, 3, 3, 4, 5, 5};
int size = sizeof(nums) / sizeof(nums[0]);
vector<int> numVec(nums, nums + size);
vector<int> result = removeNonDuplicates(numVec);
for (int num : result) {
cout << num << " ";
}
return 0;
}
В этом примере мы используем unordered_map
, чтобы посчитать количество повторений каждого элемента в массиве. Затем мы проходим по элементам unordered_map
и добавляем только те, которые повторяются ровно дважды, в новый вектор result
.
Для проверки примера мы создаем массив nums
, содержащий несколько повторяющихся элементов, и вызываем функцию removeNonDuplicates
с этим массивом в качестве аргумента. Затем мы выводим элементы, которые остались после преобразования, на экран.
Если у вас есть какие-либо вопросы или неясности, пожалуйста, не стесняйтесь задавать их мне.


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili