Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Sultik_Zaka
0 / 0 / 0
Регистрация: 21.09.2016
Сообщений: 59
#1

Пересечение двух одномерных массивов N размера

17.11.2016, 21:19. Просмотров 290. Ответов 1
Метки нет (Все метки)

Всем привет!
Было задание:
Implement function void printIntersection(vector< int >,vector< int >) that has to print all values that are same by VALUE in both arrays.

Input:
First line contains n.
That n integers are inputed for the first array.
That n integers are inputed for the second array.

Output:
Intersection of two arrays.
Note that numbers have to appear in order they are located in first ArrayList.

EXAMPLES:
Input:
5
1 2 3 4 5
1 2 3 4 5
Output:
1 2 3 4 5

Input:
3
1 2 2
1 1 2
Output:
1 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
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
#include <iostream>
#include <vector>
 
using namespace std;
typedef vector<int>::iterator iveciter;
void printIntersection(vector< int >first, vector< int >second)
{
    vector<int>third(first.size());
    for (int i = 0; i < first.size(); i++)
    {
        if (first[i] == second[i])
        {
            third[i] = first[i];
        }
        else
        {
            third[i] = 99988;
        }
        
    }
    for(iveciter it = third.begin(); it != third.end(); ++it)
    {
    iveciter it1;
        
    while((it1 = std::find(it + 1, third.end(), *it)) != third.end())
            third.erase(it1);
    }
    for(int i = 0; i < third.size(); i++)
    {
        if(third[i] == 99988)
        {
            third.erase(third.begin()+i);
        }
    }
    for(int i = 0; i < third.size(); i++)
    {
        cout << third[i] << ' ';
    }
}
 
int main()
{
    int number;
    cin >> number;
    vector<int>firstrow(number);
    vector<int>secondrow(number);
    for (int i = 0; i < number; i++)
    {
        cin >> firstrow[i];
    }
    for (int i = 0; i < number; i++)
    {
        cin >> secondrow[i];
    }
    printIntersection(firstrow, secondrow);
    return 0;
}
Все равно "проверяльщик" (сайт) выдает: Wrong Answer.
Помогите, предложите свой вариант)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2016, 21:19
Ответы с готовыми решениями:

Найти пересечение двух массивов
Даны два массива : А и B. Необходимо создать третий массив, в котором нужно...

Сравнение двух одномерных массивов
Помогите пожалуйста сравнить два одномерных численных массива и вывеси на...

Составить из двух одномерных массивов один двумерный
Пожалуйста помогите. 1.2. Написать программу инициализации двух массивов с...

Иницилизация двух одномерных динамических массивов в классе
Unit1.h(43): E2451 Undefined symbol 'W' выдает такую ошибку, вопрос почему на...

Поменять элементы двух одномерных массивов местами
Здравствуйте, У меня задача, где нужно поменять элементы 2 из двух массивов...

1
sourcerer
Модератор
Эксперт CЭксперт С++
4834 / 2025 / 316
Регистрация: 20.02.2013
Сообщений: 5,452
Записей в блоге: 24
Завершенные тесты: 1
17.11.2016, 22:11 #2
Sultik_Zaka, зачем ты третий вектор создаёшь? Он лишний. Тебе же чётко сказано, что требуется: print all values that are same by VALUE in both arrays. То есть, вывести на экран. Вот и выводи. Сравнил, если одинаковые, вывел значение на консоль.

Непонятно только, зачем они вектора по значению в функцию требуют передавать. Лишнее копирование? Для чего? Почему не по константной ссылке?

Добавлено через 37 минут
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
#include <iostream>
#include <vector>
#include <ctime>
#include <random>
 
void printIntersection( std::vector<int> vec1, std::vector<int> vec2 )
{
    size_t vec1_size = vec1.size();
    for ( size_t i = 0; i < vec1_size; ++i )
        if ( vec1[i] == vec2[i])
            std::cout << vec1[i] << " ";
}
 
template <class T>
void show( const T & arr )
{
    for ( const auto & elem : arr )
        std::cout << elem << " ";
    std::cout << "\n";
}
 
int main()
{
    std::mt19937 mt( time( nullptr ) );
    std::uniform_int_distribution<int> dist( 1, 9 );
 
    int number = dist( mt );
    std::cout << number << "\n";
 
    std::vector<int> vec1;
    std::vector<int> vec2;
 
    for ( int i = 0; i < number; ++i )
    {
        vec1.push_back( dist( mt ) );
        vec2.push_back( dist( mt ) );
    }
 
    show( vec1 );
    show( vec2 );
    printIntersection( vec1, vec2 );
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2016, 22:11

Сформировать массив из двух других одномерных массивов STL
Алгоритмы стандартной библиотеки шаблонов STL Даны два одномерных массива,...

Содержимое двух одномерных массивов переписать в один двумерный
как числа из 2 одномерных массивов записать в 1 двухмерный

Из двух одинаково упорядоченных одномерных массивов k и s сформировать один массив размером k+s
7.*.1. Помогите, пожалуйста, решить задачу в С++. Из двух одинаково...


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

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

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