8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
1

Исключить все повторяющиеся, идущие подряд элементы дека

07.07.2016, 10:45. Показов 2105. Ответов 8
Метки нет (Все метки)

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

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
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <deque>
 
using namespace std;
 
int main()
{
    int n;
    cout << "Enter size:";
    cin >> n;
 
    deque <int> d1;
 
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        d1.push_front(x);
    }
    for (int k = 0; k < d1.size()-1;k++)
    {
        while (d1[k] == d1[k+1])
        {
            swap(d1[k], d1.back());
            d1.pop_back();
        }
    }
 
    for (int j = 0; j < d1.size(); j++)
    {
        cout << d1[j] << " ";
    }
 
    system("pause");
    return 0;
}
Выхожу за гарницы и не знаю,как удалить элементы,если например "111",оставляет только "11".Думал удалять через .erase,но не придумал,как через итератор удалять помогите
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2016, 10:45
Ответы с готовыми решениями:

Исключить из массива все повторяющиеся элементы
Дан массив. Допустим я ввожу элементы 1,2,3,2,4 И нужно создать новый массив чтобы одинаковых...

Исключить из листа подряд одинаковые, подряд идущие элементы. Почему мое решение неверно?
Задача: исключить из списка подряд идущие элементы, например: --&gt; --&gt; У меня почему...

В массиве A=(a1, а2, ..., аn) удалить все подряд идущие отрицательные элементы, идущие вслед за минимальным элементом массива.
Помогите написать на паскале программу для: В массиве A=(a1, а2, ..., аn) удалить все подряд...

Удалить из массива все подряд идущие отрицательные элементы, идущие вслед за минимальным элементом массива
В массиве A=(a1, а2, ..., аn) удалить все подряд идущие отрицательные элементы, идущие вслед за...

8
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
07.07.2016, 10:58 2
Цитата Сообщение от Bob103 Посмотреть сообщение
Создать список
Не deque, а list. С ним легче решить эту задачу.
0
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
07.07.2016, 11:11  [ТС] 3
С list'ом уже делал,нужно с deque

Добавлено через 6 минут
Вот с итератором что-то
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <deque>
 
 
using namespace std;
 
int main()
{
    deque <int> d1;
 
    int n;
    cout << "Enter size:";
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        d1.push_back(x);
    }
 
    for (int k = 0; k < d1.size()-1; k++ )
        {
            deque<int>::iterator j = d1.begin();
            if (d1[k] == d1[k+1])
            {
                advance(j, k);
                d1.erase(j);
            }
           
        }
 
    for (int k = 0; k < d1.size(); k++)
    {
        cout << d1[k] << " ";
    }
   
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
Но также удаляет,только 1 символ из "111'->'11'
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
07.07.2016, 11:17 4
Bob103,
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
 
 
using namespace std;
 
template <typename T>
void print(const T& coll)
{
    copy(coll.cbegin(), coll.cend(),
        ostream_iterator<typename T::value_type>(cout, " "));
    cout << endl;
}
 
int main()
{
    deque<int> coll{ 1, 2, 2, 1, 1, 1, 5, 5, 0, 0, 0, 0 };
    print(coll);
    
    size_t sz = coll.size();
    deque<int>::iterator last = coll.begin(), next = last + 1;
    while (next != coll.end())
    {
        if (*last == *next)
        {
            last = coll.erase(next);
            if (last == coll.end())
                break;
        }
        else
            ++last;
        next = last + 1;
    }
 
    print(coll);
    cout << "Number of deleted pairs: " << sz - coll.size() << endl;
 
    return 0;
}
0
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
07.07.2016, 11:24  [ТС] 5
Так,всё равно оставляет из "111"->"11"
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
07.07.2016, 11:28 6
Лучший ответ Сообщение было отмечено Bob103 как решение

Решение

Bob103, я так и делал, потому что условие понял именно так. Если вам надо, чтобы из "11...1"->"1", то код будет еще легче:

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
25
26
27
28
#include <iostream>
#include <algorithm>
#include <iterator>
#include <deque>
 
 
using namespace std;
 
template <typename T>
void print(const T& coll)
{
    copy(coll.cbegin(), coll.cend(),
        ostream_iterator<typename T::value_type>(cout, " "));
    cout << endl;
}
 
int main()
{
    deque<int> coll{ 1, 2, 2, 1, 1, 1, 5, 5, 0, 0, 0, 0 };
    print(coll);
    
    size_t sz = coll.size();
    coll.erase(unique(coll.begin(), coll.end()), coll.end());
    print(coll);
    cout << "Number of deleted pairs: " << sz - coll.size() << endl;
 
    return 0;
}
1
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
07.07.2016, 11:42  [ТС] 7
Спасибо,то,что нужно Если не сложно,что за алгортим "unique"

Добавлено через 4 минуты
Он удаляет дубликаты из последовательности?
0
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
07.07.2016, 11:43 8
Bob103, с примером http://www.cplusplus.com/refer... hm/unique/

Ну, удаляет, это грубо говоря. Скорее, перемещает в конец интервала.
1
8 / 8 / 9
Регистрация: 23.09.2015
Сообщений: 283
07.07.2016, 11:46  [ТС] 9
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2016, 11:46
Помогаю со студенческими работами здесь

В массиве удалить все подряд идущие отрицательные элементы
В массиве A=(a1, а2, ..., аn) удалить все подряд идущие отрицательные элементы, идущие вслед за...

Найти в массиве подряд идущие элементы
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Удалить подряд идущие элементы в списке
Пишу программу, создаю односвязный список, вывожу его на экран. Далее нужно удалить подряд-идущие...

Найти в массиве подряд идущие элементы, удовлетворяющие условию
Помогите пожалуйсто решить задачку, не могу сообразить:wall: Создать 2 целочисленных массива X...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru