C++ В массив A длиной N из всех одинаковых элементов оставьте только по одному представителю. Остальные удалите. Рассмотрите 2 варианта: а) массив упорядочен б) не упорядочен

25 Фев 2020 в 19:45
139 +1
0
Ответы
1

а) Если массив упорядочен, то достаточно просто пройтись по массиву и сравнивать каждый элемент с предыдущим. Если элемент равен предыдущему, то это дубликат и его нужно удалить.

Пример кода для упорядоченного массива:

#include <iostream>
void removeDuplicates(int arr[], int &n) {
if (n == 0) return;
int index = 0;
for (int i = 1; i < n; i++) {
if (arr[i] != arr[index]) {
arr[++index] = arr[i];
}
}
n = index + 1;
}
int main() {
int n = 8;
int arr[] = {1, 1, 2, 2, 2, 3, 3, 3};
removeDuplicates(arr, n);
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
return 0;
}

б) Если массив не упорядочен, то можно сначала отсортировать его, а затем применить тот же подход, что и для упорядоченного массива.

Пример кода для неупорядоченного массива:

#include <iostream>
#include <algorithm>
void removeDuplicates(int arr[], int &n) {
if (n == 0) return;
std::sort(arr, arr + n);
int index = 0;
for (int i = 1; i < n; i++) {
if (arr[i] != arr[index]) {
arr[++index] = arr[i];
}
}
n = index + 1;
}
int main() {
int n = 8;
int arr[] = {2, 3, 1, 3, 2, 1, 2, 3};
removeDuplicates(arr, n);
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
18 Апр в 16:46
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 696 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир