Дан отсортированный по возрастанию массив 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 << C[j] << " ";
i++;
break;
}
}
}
Он же отсортированный - выводить нужно только смены значений:
int main(int argc, const char * argv[])
{
int a[] = {1,1,1,2,2,3,4,5,5,5,5,6,7,8,8,8};
cout << a[0] << " ";
for(int last = a[0], i = 1; i < sizeof(a)/sizeof(a[0]); ++i)
{
if (a[i] == last) continue;
cout << (last = a[i]) << " ";
}
cout << endl;
}
Или, с применением стандартной библиотеки - в одну строку:
copy(begin(a),unique(begin(a),end(a)),ostream_iterator<int>(cout," "));
Продолжая хороший ответ от Harry
, если пользоваться стандартными альгоритмами, то проще:
unique_copy(begin(a), end(a), ostream_iterator<int>(cout, " "));
Предлагаю реализацию немного лучше чем у Harry
int main(int argc, const char * argv[])
{
int a[] = {1,1,1,2,2,3,4,5,5,5,5,6,7,8,8,8};
cout << a[0] << ' ';
for(int i = 1; i < sizeof(a)/sizeof(a[0]); ++i)
{
if (a[i] !=a[i-1]) cout<<a[i]<<' ';
}
cout << endl;
}
Можно вот так вот
int main()
{
int a[] = {1,1,1,2,2,3,4,5,5,5,5,6,7,8,8,8};
cout << a[0] << ' ';
for(int i = 1; i < sizeof(a)/sizeof(a[0]); ++i)
{
if (a[i] !=a[i-1]) cout<<a[i]<<' ';
}
cout << endl;
}
int array[] = { 1, 1, 2, 3, 4, 8, 8, 9, 10, 10, 10 };
for (int i = 0; i < sizeof(array) / sizeof(int); ++ i)
{
// Начиная со второго все элементы проверяем на равенство с предыдущим, если равен, то пропускаем
if (i > 0 && array[i] == array[i - 1])
continue;
std::cout << array[i] << std::endl;
}
Вывод: 1 2 3 4 8 9 10
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли определить тип переданных параметров variadic templates, на этапе компиляции?
Как в QSpinBox, QDoubleSpinBox задать некоторый множественный диапазон? Примеры как должен работать этот SpinBox, аналогично для DoubleSpinBox: 1) Должен принимать...
Столкнулся с проблемой, но на существующих топиках об этой проблеме не нашел решенияЯ в затруднении, все include'ы правильно расставлены вроде,...
у меня есть std::set с кастомным компаратором, в set я кладу свой тип данных, который содержит два параметра, уникальность должна обеспечиваться...