Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 67

Поиск одинаковых чисел в трех массивах

08.04.2016, 18:11. Показов 3252. Ответов 10
Метки нет (Все метки)

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

Моя идея такова, что сначала сравниваем первые два массива, находим там одинаковые элементы, записываем их в четвертый массив, затем сравниваем четвертый массив с третьим и записываем одинаковые числа уже в пятый массив соответственно. Проблема уже возникла на сравнении первых двух массивов, т.к. при таком коде:
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
#include <iostream>
#include <conio.h>
#include<stdlib.h>
#include <ctime>
 
using namespace std;
 
void main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    
    const int n = 5;
    int A[n], B[n], C[n], i, j, k=0, D[n];
 
    for (i = 0; i < n; i++)
    {
        A[i] = -5+rand()%(5-(-5)+1);
        B[i] = -5+rand()%(5-(-5)+1);
        C[i] = -5+rand()%(5-(-5)+1);
    }
    for (i = 0; i < n; i++)
        cout << A[i] << '\t';
    
    cout << endl;
    for (i = 0; i < n; i++)
        cout << B[i] << '\t';
    
    cout << endl;
    for (i = 0; i < n; i++)
        cout << C[i] << '\t';
 
    for (i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            if (A[i]==B[j])
            {
                D[k]=A[i];
                k++;
                break;
            }
    cout << endl;
    for (i = 0; i < k; i++)
        cout << D[i] << '\t';
    _getch();
}
и в случае нахождения в первом массиве одинаковых элементов в четвертый массив этот элемент записывается два раза соответственно. Как этого избежать, или может быть есть какой-либо другой способ(без всяких изысков, типа vector) нахождения одинаковых чисел в трех массивах с последующем их выводом на экран..? Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2016, 18:11
Ответы с готовыми решениями:

Поиск одинаковых элементов в массивах!
Даны 2 массива(x,y) cоставить новый массив (z), из тех элементов массива (x) которые не входят в массиве (у). Я вот что написал но...

Поиск одинаковых элементов в 2 массивах
Всем привет) Как можно организовать поиск одинаковых элементов в 2 массивах? (сам цикл подскажите пож...) Спасибо заранее)

Вывести количество одинаковых из введенных трех чисел
Ввести с клавиатуры 3 числа. Вывести количество одинаковых из них.

10
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.04.2016, 18:34
Сначала избавься от повторов в первом массиве. Затем проходи по нему и ищи элемент во всех остальных.
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 67
08.04.2016, 18:43  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Сначала избавься от повторов в первом массиве. Затем проходи по нему и ищи элемент во всех остальных.
А если после данной проверки нужно продолжать пользоваться исходными массивами? Получается, что придется создавать слишком много новых массивов, может все таки есть какой-то другой более рациональный способ?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.04.2016, 19:05
Ну пользуйся. Я не говорил, что их нужно изменять. Создай параллельно первому массиву булевский и повторяющиеся элементы отметь false, при поиске пропускай их.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
08.04.2016, 19:06
Цитата Сообщение от Nordener Посмотреть сообщение
А если после данной проверки нужно продолжать пользоваться исходными массивами?
Если в задаче разрешается переиспользовать (то есть модифицировать) исходные массивы, то разумнее просто отсортировать все три массива, а затем за один проход одновременно выполнить операцию пересечения трех множеств, которая и даст ответ на исходный вопрос.

Если же исходные массивы модифицировать не разрешается, то проще скопировать все три и рпботать этим же способом.
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 67
08.04.2016, 19:54  [ТС]
Может все таки есть более простой способ нахождения одинаковых элементов в трех массивах? Можно отвечать с кодом пожалуйста, а то так не совсем понятно..

Добавлено через 20 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
операцию пересечения трех множеств
Сижу и никак не пойму как это реализовать на c++, можно пример?

Добавлено через 19 минут
Не уже ли никто не может просто написать решение вопроса? "Поиск одинаковых чисел в трех массивах с последующим их выводом?"
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.04.2016, 19:58
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
bool fA[n], fB[n], fC[n];
 
for (i = 0; i < n; i++)
{
    fA[i] = true;
    fB[i] = true;
    fC[i] = true;
}
 
    for (i = 0; i < n; i++)
        for(j = i + 1; j < n; j++)
        {
            if (fA[i] && A[i] == A[j]) fA[j] = false;
            if (fB[i] && B[i] == B[j]) fB[j] = false;
            if (fC[i] && C[i] == C[j]) fC[j] = false;
        }
 
    int c = 0;
 
    for (i = 0; i < n; i++)
        for(j = 0; j < n; j++)
        {
            if (fA[i] && fB[j] && A[i] == B[j])
                for(k = 0; k < n; k++)
                    if (fC[k] && A[i] == C[k]) D[c++] = A[i];
        }
1
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 67
08.04.2016, 20:35  [ТС]
nmcf, спасибо конечно, работать-то оно работает, но как - совершенно не понятно для меня, а для меня важно понимать как работает, а не просто копировать...
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
#include <iostream>
#include <conio.h>
#include<stdlib.h>
#include <ctime>
 
using namespace std;
 
void main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    
    const int n = 10;
    int A[n], B[n], C[n], i, j, k=0, D[n], E[n], p=0;
 
    for (i = 0; i < n; i++)
    {
        A[i] = -5+rand()%(5-(-5)+1);
        B[i] = -5+rand()%(5-(-5)+1);
        C[i] = -5+rand()%(5-(-5)+1);
    }
    for (i = 0; i < n; i++)
        cout << A[i] << '\t';
    
    cout << endl;
    for (i = 0; i < n; i++)
        cout << B[i] << '\t';
 
    cout << endl;
    for (i = 0; i < n; i++)
        cout << C[i] << '\t';
 
    bool fA[n], fB[n], fC[n];
 
    for (i = 0; i < n; i++)
    {
        fA[i] = true;
        fB[i] = true;
        fC[i] = true;
    }
 
    for (i = 0; i < n; i++)
        for(j = i + 1; j < n; j++)
        {
            if (fA[i] && A[i] == A[j]) fA[j] = false;
            if (fB[i] && B[i] == B[j]) fB[j] = false;
            if (fC[i] && C[i] == C[j]) fC[j] = false;
        }
 
    int c = 0;
 
    for (i = 0; i < n; i++)
        for(j = 0; j < n; j++)
        {
            if (fA[i] && fB[j] && A[i] == B[j])
                for(k = 0; k < n; k++)
                    if (fC[k] && A[i] == C[k]) D[c++] = A[i];
        }
        
    cout << endl;
    for (i = 0; i < c; i++)
        cout << D[i] << '\t';
    _getch();
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
08.04.2016, 20:48
Ну так вникай. Что тут сложного? Простой перебор.
0
0 / 0 / 1
Регистрация: 04.05.2014
Сообщений: 67
08.04.2016, 20:58  [ТС]
nmcf, ну да посидел немного, по шагам по выполнял, понял вроде бы... Но я сам бы до этого решения никогда бы не дошел, обидно...
0
68 / 68 / 37
Регистрация: 26.10.2013
Сообщений: 198
08.04.2016, 23:43
Nordener, можно попробовать следующий код:
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
        int max = A[0]; 
    int min = A[0];
    for(i = 0; i < n; i++) {
        if(A[i] > max) max = A[i];
        if(B[i] > max) max = B[i];
        if(C[i] > max) max = C[i];
 
        if(A[i] < min) min = A[i];
        if(B[i] < min) min = B[i];
        if(C[i] < min) min = C[i];
    }
 
    int len = max - min + 1;
    int* D = new int[len];
    for(i = 0; i < len; i++) D[i] = 0;
 
    for(i = 0; i < n; i++) D[A[i] - min] = 1;
    for(i = 0; i < n; i++) if(D[B[i] - min]) D[B[i] - min] = 2;
    for(i = 0; i < n; i++) if(D[C[i] - min] == 2) D[C[i] - min] = 3;
 
    bool rez = false;
    cout<<"Одинаковые элементы: ";
    for(i = 0; i < len; i++){
        if(D[i] == 3) {
            rez = true;
            cout<<i + min<<" ";
        }
    }
    if(!rez) cout<<"Нет совпадений";
    cout<<endl;
Код прост, но стоит его использовать только если точно известно, что разброс значений в массивах не будет громадным. Иначе его использование будет неоправданным.

P.S. Если уже изучали STL, то через map все будет значительно проще и нет такого ограничения как для моего варианта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2016, 23:43
Помогаю со студенческими работами здесь

Проверить есть ли среди трех чисел хотя бы два одинаковых
1.Дано три натуральних числа. З’ясувати, чи є серед них хоча б два однакових Даны 3 натуральных числа. Проверить, есть ли среди них хотя...

Поиск 2-х и более одинаковых чисел в массиве
Программа должна находить в массиве значения, встречающиеся 2 и более раз. Проблема в том, что если одинаковых чисел 4 и больше, то в...

Поиск минимального, среднее и максимального чисел из трех введенных
Помогите плиз, у пользователя запрашивают 3 числа и программа ищет среди них минимальное, среднее и максимальное. С++

Если сумма трех попарно различных действительных чисел меньше 100, то наименьшее из этих трех чисел заменить полусуммой
2)Если сумма трех попарно различных действительных чисел x,y,z меньше 100, то наименьшее из этих трех чисел заменить полусуммой двух...

Посчитать количество одинаковых элементов в двух массивах
#include &lt;cstdio&gt; #include &lt;map&gt; #include &lt;iostream&gt; using namespace std; map &lt;bool, int&gt; a; int n, m, year, i, k;////k -...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru