Как убрать повторы в массиве c
Перейти к содержимому

Как убрать повторы в массиве c

  • автор:

c++ Удаление повторяющихся элементов массива

В денном решении все одинаковые сдвигаются в хвост массива с уменьшением длины.

Хвост можно обрезать, а можно не учитывать.

for (m = 0; m < size; m++) < // cout size--; > > > 

Отслеживать
ответ дан 7 дек 2019 в 12:16
5,908 2 2 золотых знака 8 8 серебряных знаков 17 17 бронзовых знаков

Возможен вариант решения через запись уникальных значений в новый массив. Приведен код, когда ВСЕ повторяющиеся значения удаляются. При необходимости можно переработать код для удаления всех повторяющихся кроме первого (проверять все значения изначального массива с финальным массивом, а не с первичным).

 void main() < int k = 0; int i = 0; int firstSize = 0; int outSize = 0; int controlNumb = 0; setlocale(LC_ALL, "Russian"); std::cin >> firstSize; int* arrayFirst = new int[firstSize]; int* arrayOut = new int[firstSize]; for (int count = 0; count < firstSize; count++) std::cin >> arrayFirst[count]; for (int count = 0; count < firstSize; count++) arrayOut[count]=0; for (i = 0; i < firstSize; i++) //Для каждого числа в массиве < controlNumb = 1;//Обновляем контрольное значение for (k = 0; k < firstSize; k++) //проверяем каждое значение массива if ((k!=i) & (arrayFirst[i] == arrayFirst[k])) controlNumb = 0; //кроме него самого, и если какое то из них совпало, присваиваем контрольному значению 0 if (controlNumb) //если контрольное значение осталось 1, то прибавляем 1 к условному размеру Конечного массива и записываем в конец уникальное число < outSize++; arrayOut[outSize - 1] = arrayFirst[i]; >> if (!outSize) //если условный размер финального массива остался равен нулю std::cout 
Отслеживать
ответ дан 9 окт 2020 в 20:46
11 2 2 бронзовых знака

Для решения Вашей задачи есть много вариантов.

ИМХО работайте с вектором. Скопируйте Ваши данные в вектор

int *arr = new int[10]; std::vector v; . if (arr)

Для Вас я привел 2 варианта решения задачи :

1) С предварительной сортировкой и использование std::unique

2) С сохранением последовательности

#include #include #include #include int main() < // Вариант для последовательности с предворительной сортировкой std::vectorv; std::copy(std::begin(v), std::end(v), std::ostream_iterator); std::cout << std::endl; std::sort(v.begin(), v.end()); auto last = std::unique(v.begin(), v.end()); v.erase(last, v.end()); std::copy(std::begin(v), std::end(v), std::ostream_iterator); std::cout << std::endl; std::cout << std::endl; // Вариант для несоритрованной последовательности std::vectorv2; std::copy(std::begin(v2), std::end(v2), std::ostream_iterator); std::cout ; it != std::end(v2); it = std::next(it)) < for (auto sub_it; sub_it != std::end(v2); sub_it = std::next(sub_it)) < if (*sub_it == *it) < v2.erase(sub_it); --sub_it; >> > std::copy(std::begin(v2), std::end(v2), std::ostream_iterator); std::cout

Вывести массив чисел без повторений

введите сюда описание изображения

Дан отсортированный по возрастанию массив C (например, <2, 2, 2, 3, 3>). Нужно вывести в консоль этот же массив C без повторений (то есть должно получиться просто 2 3). Я, честно, пытался это сделать, но у меня всегда появляется 1-2 лишних цифры. Есть идея формирования нового массива перебиранием каждого элемента C, но это вряд ли хорошее решение в плане скорости работы. Как лучше поступить? Могу скинуть полный исходник, если нужно.

for (int i = 0; i < size; i++) < for (int j = 1; j < size; j++) < if (C[i] != C[j]) < cout > > 

Отслеживать

222k 15 15 золотых знаков 120 120 серебряных знаков 234 234 бронзовых знака

задан 18 дек 2018 в 13:07

zloysergunya zloysergunya

69 1 1 серебряный знак 8 8 бронзовых знаков

Как удалить повторяющиеся значения с массива?

Есть массив, с которого нужно удалить повторяющиеся значения , но оставить одно уникальное. Например : [privet, privet, kakdela ] должно получится [privet, kakdela].

А у меня выходит так [kakdela ] то есть удаляет все повторы не оставляя ни одного . Подскажите как исправить код ?

var array = [1, 2, 1, 10, 5, 3, 4, 40, 50], i = array.length, result = []; array.sort(function (a, b) < return a - b; >); for (var i = 0; i < array.length; i++) < array[i] != array[i - 1] && array[i + 1] != array[i] && result.push(array[i]) >alert(result);
  • Вопрос задан более трёх лет назад
  • 12143 просмотра

C: Массивы

Тема массивов в С довольно обширна. В этом уроке мы познакомимся с базовыми концепциями работы с массивами.

Задание

Допишите функцию int sum(int *arr, length) , которая принимает массив и его размер и возвращает сумму элементов массива.

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *