3 / 3 / 0
Регистрация: 07.11.2018
Сообщений: 107
1

Как убрать повторения?

11.03.2019, 13:09. Показов 1944. Ответов 5
Метки нет (Все метки)

Даны два массива: А[M] и B[N] (M и N вводятся с клавиатуры). Необходимо создать третий массив минимально возможного размера, в котором нужно собрать общие элементы двух массивов без повторений.

Как по красивому убрать повторения в 3 массиве не создавая новый цикл с перебором? (Или это обязательно?)

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
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main() {
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
 
    int* ptr = NULL, * ptr2 = NULL, * ptr3 = NULL;
    long N, M, H=0;
    cout << "Введите длину массива M и N " << endl;
    cin >> N >> M;
    ptr = new int[N];
    ptr2 = new int[M];
 
    for (long i = 0; i != N; i++) {
        *(ptr + i) = rand() % 10 + 1;
        cout << *(ptr + i) << " ";
    }
    cout << endl;
    for (long i = 0; i != M; i++) {
        *(ptr2 + i) = rand() % 10 + 1;
        cout << *(ptr2 + i) << " ";
    }
    cout << endl;
 
    for (long i = 0; i != N; i++) {
        for (long j = 0; j != M; j++) {
            if (*(ptr + i) == *(ptr2 + j)) {
                H++;
            }
        }
    }
    ptr3 = new int[H];
    for (long i = 0, t = 0; i != N; i++) {
        for (long j = 0; j != M; j++) {
            if (*(ptr + i) == *(ptr2 + j)) {
                *(ptr3 + t) = *(ptr2 + j);
                cout << *(ptr3 + t) << " ";
                t++;
            }
        }
    }
 
 
    delete[] ptr;
    delete[] ptr2;
    delete[] ptr3;
    ptr = NULL;
    ptr2 = NULL;
    ptr3 = NULL;
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2019, 13:09
Ответы с готовыми решениями:

Как из упорядоченого массива убрать повторения?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;set&gt; using namespace std; void Sort(int...

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

Как подсчитать повторения символов в тексте?
как подсчитать в введенном с клавы или с файла тексте ,количество повторяющихся символов? короче...

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

5
Продавец времени
7113 / 3992 / 920
Регистрация: 12.03.2015
Сообщений: 18,777
11.03.2019, 13:19 2
Цитата Сообщение от Nuril Посмотреть сообщение
Как по красивому убрать повторения в 3 массиве
Надо формировать 3-й массив уже с проверкой при добавлении в него очередного элемента.
Цитата Сообщение от Nuril Посмотреть сообщение
не создавая новый цикл с перебором?
Если есть массив, то без цикла или рекурсии не обойтись, так или иначе.
1
287 / 191 / 93
Регистрация: 12.02.2019
Сообщений: 750
11.03.2019, 13:30 3
Лучший ответ Сообщение было отмечено Nuril как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int* check(int *p,int &H,int n )
{
  int i,*a;
  for(i=0; i<H; i++)
    if(p[i]==n) break;
  if(i<H) return p;
  a=new int[H+1];
  memmove(a,p,H*sizeof(int));
  delete[] p;
  a[H++]=n;
  return a;
}
.......
int H=0;
........
//стр.30
if (*(ptr + i) == *(ptr2 + j)) 
  ptr3=check(ptr3,H,*(ptr + i) );
можно так
1
1966 / 1093 / 465
Регистрация: 11.10.2018
Сообщений: 5,586
11.03.2019, 13:33 4
Цитата Сообщение от Nuril Посмотреть сообщение
C++
1
int* ptr = NULL, * ptr2 = NULL, * ptr3 = NULL;
- думаю здесь надо вот так:
C++
1
int* ptr = NULL, ptr2 = NULL, ptr3 = NULL;
1
Диссидент
Эксперт C
26826 / 16735 / 3666
Регистрация: 24.12.2010
Сообщений: 37,464
11.03.2019, 15:27 5
Знатоки плюсов! А через контейнеры типа set никак нельзя?
0
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,745
11.03.2019, 15:46 6
Цитата Сообщение от Байт Посмотреть сообщение
А через контейнеры типа set никак нельзя?
Можно. Есть же функция set_intersection.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2019, 15:46
Помогаю со студенческими работами здесь

Как убрать повторения.
Доброго времени суток. Суть вопроса такова. Есть два одинаковых действия. Например добавить,...

Как убрать повторения из ComboBox
Здравствуйте! Проблема в следующем: я заполняю combobox данными из колонки таблицы sql, но там есть...

Повторения в рандоме. Как убрать?
Приветствую. В программе нижет осуществлен рандомный вывод вопросов на экран, но, вопросы...

Как при получение списка процессов убрать их повторения
Получаю список процессов: static void Main(string args) { Process procList =...


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

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

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