С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Siplbl
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
#1

Скрыть или удалить повторяющиеся элементы массива - C++

22.01.2016, 12:58. Просмотров 532. Ответов 7
Метки нет (Все метки)

Вот сама задача.
Даны два массива. Массив А состоит из N элементов , массив В состоит из М элементов. Оба массива отсортировать по не возрастанию. Разработать программу для слияния этих массивов в отсортированный по не возрастанию массив С, не содержащий одинаковых элементов.

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

Вот, что у меня есть на данный момент.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include<iostream>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
char*Rus(const char*text);
void init(int A[], int size);
void out(int A[], int size);
void sortb(int B[], int size);
void main()
{
    int z = 20;
    const int n = 10;
    int A[n];
    init(A, n);
    cout << (Rus("Неотсортированный массив A размером 10 символов\n"));
    out(A, n);
    sortb(A, n);
    cout << (Rus("\nОтсортированный массив A по не убыванию\n"));
    out(A, n);
    const int m = 10;
    int B[m];
    cout << ("\n*************************************");
    init(B, m);
    cout << (Rus("\n\nНеотсортированный массив B размером 10 символов\n"));
    out(B, m);
    sortb(B, m);
    cout << (Rus("\nОтсортированный массив B по не возрастанию\n"));
    out(B, m);
    const int d = 20;
    int C[d];
    for (int i = 0; i<m; i++)
    {
        C[i] = A[i];
        C[i + m] = B[i];
    }
    cout << (Rus("\nСлияние массива A и B в массив C\n\n"));
    out(C, d);
    cout << (Rus("\n Отсортированный массив C по не убыванию без повторяющихся элементов\n"));
    sortb(C, d);
    out(C, d);
    cout << "\n";
}
void init(int A[], int size)
{
    srand((unsigned)time(NULL));
    for (int i = 0; i < size; i++)
        A[i] = rand() % 100;
}
 
void out(int A[], int size)
{
    cout << "\n";
    for (int i = 0; i < size; i++)
        cout << A[i] << " ";
    cout << "\n";
}
void sortb(int B[], int size)
{
    int x, i, j;
    for (i = 0; i < size; i++)
    {
        x = B[i];
        for (j = i - 1; j >= 0 && B[j] < x; j--)
            B[j + 1] = B[j];
        B[j + 1] = x;
    }
}
char bufRus[256];
char*Rus(const char*text)
{
    CharToOemA(text, bufRus);
    return bufRus;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2016, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скрыть или удалить повторяющиеся элементы массива (C++):

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

Удалить из массива повторяющиеся элементы - C++
Удалить из массива повторяющиеся элементы.жду вашим решений

Из массива удалить все повторяющиеся элементы - C++
Из заданного целочисленного массива удалить все повторяющиеся элементы, оставив только их первые вхождения, т.е. из заданного массива...

Как удалить из исходного массива не повторяющиеся элементы? - C++
Вводится длина одномерного массива и значения его элементов. Удалить из исходного массива уникальные (не повторяющиеся) элементы. Результат...

Массив. Удалить из исходного массива уникальные (не повторяющиеся) элементы - C++
Вводится длина одномерного массива и значения его элементов. Удалить из исходного массива уникальные (не повторяющиеся) элементы. Результат...

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Помогите, зачёт пишу

7
ivan37
54 / 54 / 46
Регистрация: 11.05.2015
Сообщений: 136
22.01.2016, 17:48 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <set>
#include <functional>
//...
    set<int,greater<int>> s;
    s.insert(A, A+n);
    s.insert(B, B+m);
    int d = s.size();
    int* C = new int [d];
    int i = 0;
    for (int temp : s)
        C[i++] = temp;
    cout << "\nОтсортированный массив C по убыванию без повторяющихся элементов\n\n";
    out(C, d);
    delete[] C;
Почему такая странная формулировка
Цитата Сообщение от Siplbl Посмотреть сообщение
отсортированный по не возрастанию массив
можно же просто написать отсортированный по убыванию.
И еще вместо функции Rus, в начале можно добавить setlocale(LC_ALL,"").
0
Alexander Bakay
100 / 52 / 16
Регистрация: 15.12.2015
Сообщений: 318
Завершенные тесты: 2
22.01.2016, 18:07 #3
есть простой вариант:
1)Сливайте в конце все не в обычный массив, а в вектор.
2)Отсортируйте полученный вектор (с помощью sort)
3)Оставьте только уникальные элементы (с помощью unique)
4)Вуаля, все просто
0
Siplbl
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
22.01.2016, 18:32  [ТС] #4
ivan37, Alexander Bakay,
Всё это конечно хорошо, но я на данный момент не изучал всех этих чудных функций. Хочется разобрать во всём.
А не просто скопировать и вставить.
C++
1
2
3
4
5
6
7
8
9
10
11
void sortb(int B[], int size)
{
    int x, i, j;
    for (i = 0; i < size; i++)
    {
        x = B[i];
        for (j = i - 1; j >= 0 && B[j] < x; j--)
            B[j + 1] = B[j];
        B[j + 1] = x;
    }
}
может есть замена этой сортировке, которая уже предусматривает проверку на "вшивость/совпадение" элементов и просто пропускает их?
0
Alexander Bakay
100 / 52 / 16
Регистрация: 15.12.2015
Сообщений: 318
Завершенные тесты: 2
22.01.2016, 19:01 #5
зачем все совать в одну функцию? можете создать еще одну функцию, которая проверяет в массиве соседние элементы на равенство, и при совпадении один из этих элементов удалялся
0
Siplbl
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
22.01.2016, 19:09  [ТС] #6
Alexander Bakay,
Циклом for прогнать прогнать уже получившийся массив C. if arr[i]==ar[i]
а дальше, как удалить значение из массива ?
else
continue; перейти на другой шаг итерации?
или как это должно выглядеть?

Добавлено через 3 минуты
Нашёл сортировка с помощью дерева.
Буду пробовать =)
0
Alexander Bakay
100 / 52 / 16
Регистрация: 15.12.2015
Сообщений: 318
Завершенные тесты: 2
22.01.2016, 19:10 #7
честно говоря не сильно понял этот момент:
Цитата Сообщение от Siplbl Посмотреть сообщение
if arr[i]==ar[i]
возможно вы имели ввиду :
C++
1
if arr[i]==arr[i+1]
? тогда - да.

А по поводу удаление, тут можно использовать упрощенный вариант - создание еще одного динамического массива, в который будут добавляться элементы arr[i] - которые проходят условия: (arr[i]!=arr[i+1])
1
Siplbl
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 18
22.01.2016, 19:34  [ТС] #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void del(int A[],int arr[20], int size)
{
    int i;
    for (i = 0; i < size; i++)
    {
        if (A[i] == A[i + 1]){}
        else
        {
            arr[i] = A[i];
        }
    }
    
}
void outd(int arr[20])
{
    cout << "\n";
    for (int i = 0; i < 20; i++)
    if (arr[i]>0)
        cout << arr[i] << " ";
    cout << "\n";
}
Всем спасибо. не идеал, но работает Для моего уровня знания более чем достаточно
0
22.01.2016, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2016, 19:34
Привет! Вот еще темы с ответами:

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Как мне удалять повторяющийся элемент? #include &lt;iostream&gt; using namespace std; int main () {float a; int n,k=0; cout&lt;&lt;&quot;n=&quot;;...

удалить из массива повторяющиеся элементы, оставив только их первые вхождения. класс-контейнер вектор - C++
Добрый день!!! Не могли бы помочь написать программу на С++ при помощи класса-контейнера вектора. вот код)) Заранее спасибо! #include...

Удалить повторяющиеся элементы списка - C++
Есть список в виде класса. Нужно удалить повторяющиеся элементы, вернее, чтобы каждого было по одному. (например, вводится 1 2 3 3 4 4, а...

Удалить повторяющиеся элементы в отсортированнном массиве - C++
пример такого массива I={0,1,3,3,3,5,6,8,10,10} Т.е. я так понимаю, нужно сдигать все элементы при повторении влево, и записывать в инт...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.