Форум программистов, компьютерный форум CyberForum.ru

Преобразовать массив, уменьшив каждую его серию на один элемент. - C++

Восстановить пароль Регистрация
 
Ejevikka
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 38
11.03.2012, 15:37     Преобразовать массив, уменьшив каждую его серию на один элемент. #1
Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую его серию на один элемент.
серия - группа подряд идущих одинаковых элементов,
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 15:37     Преобразовать массив, уменьшив каждую его серию на один элемент.
Посмотрите здесь:

Преобразовать массив, увеличив первую/последнюю/все серии наибольшей длины на один элемент C++
C++ Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент
Дан массив размера n. Преобразовать его, умножив все положительные элементы на минимальный элемент C++
Каждую серию элементов в массиве увеличить на 1 элемент C++
Преобразовать массив, если в нем есть хоть один отрицательный элемент C++
Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением C++
C++ Заменить каждую серию, длина которой больше k, на один наименьший элемент массива
Как преобразовать один элемент String в Int C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.03.2012, 16:03     Преобразовать массив, уменьшив каждую его серию на один элемент. #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <algorithm>
#include <cstddef>
#include <iterator>
#include <list>
 
int main()
{
   std::list<int> vec = {1,1,2,3,4,4,4,3,2,1,5,5};
   std::list<int>::iterator iter = vec.begin();
   while (iter != vec.end())
   {
      std::list<int>::iterator next = std::find_if(iter, vec.end(), [&iter](const int value) { return value != *iter; });
      ptrdiff_t difference = std::distance(iter, next);
      iter = next;
      if (difference > 1)
      {
         std::advance(iter, -1);
         iter = vec.erase(iter);
      }
   }
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
http://liveworkspace.org/code/86aabf...412dd658f82b21
Yandex
Объявления
11.03.2012, 16:03     Преобразовать массив, уменьшив каждую его серию на один элемент.
Ответ Создать тему
Опции темы

Текущее время: 12:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru