Форум программистов, компьютерный форум CyberForum.ru

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

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

Сравнение 2х массивов за 1 просмотр - C++

16.11.2011, 23:04. Просмотров 784. Ответов 8
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане Будьте любезны, подскажите как решить задачку. Никак не могу понять как это можно сделать одним просмотром

Дан массив целых чисел, содержащий n элементов. Для тестирования предусмотреть возможность задавать элементы массива различным образом: при описании с инициализацией, присвоением значений (в том числе случайных), или вводом необходимых значений..

Из двух массивов A(N) и B(M), упорядоченных по возрастанию, получить за один просмотр массив С(К), также упорядоченный по возрастанию, в который включить пересечение элементов двух исходных массивов.


Вот мое решение, но не за один просмотр.

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
#include "stdafx.h"
#include <iomanip>    
#include <iostream>  
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{ int a[13]={1,2,3,4,5,6,7,8,9,10,18,23,45},b[6]={5,6,7,9,11,12},c[10],l,f=0;
 
                for(int i=0,k=0;i<6;i++,k++)
                {
                    for(int t=0;t<13;t++)
                    {   if  (b[k]==a[t])
                        {
                        c[f]=b[k];
                        f++;
                        break;
                        }
                    }
 
 
 
                }
 
 
                for (l = 0; l < f; l++)
       cout<<setw(3) << c[l];
    cout<<endl;
    return 0;
}
Подскажите как это можно сделать с помощью указателей и как без них. Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
16.11.2011, 23:15     Сравнение 2х массивов за 1 просмотр #2
C++
1
2
3
4
5
6
for(size_t i = 0, j = 0; i < a.size() && j < b.size();)
    if (a[i] > b[j])
        ++j;
    else if (a[i] < b[j])
        ++i;
    else { c.push_back(a[i]); ++i; ++j; }
Как-то так.
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
16.11.2011, 23:42  [ТС]     Сравнение 2х массивов за 1 просмотр #3
Не могли бы Вы прокомментировать эти участки? Нужно прописывать директиву #include <deque> ?
C++
1
2
3
for(size_t i = 0, j = 0; i < a.size() && j < b.size();)
...
else { c.push_back(a[i]); ++i; ++j; }
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 00:12     Сравнение 2х массивов за 1 просмотр #4
В моев коде a, b, c были векторами (#include <vector>), но я думаю не составит труда переделать под обычные массивы, если так хочется.

Я всего лишь описал алгоритм. Так как массивы отсортированы, то идем по ним параллельно. Если какой-то элемент меньше, то по тому массиву и двигаемся дальше. Если элементы равны, то записываем этот элемент в массив с.
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 00:15  [ТС]     Сравнение 2х массивов за 1 просмотр #5
Никогда не работал с векторами . буду очень благодарен, если поясните как переделать под массивы.
В общем суть я понял. Спасибо.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 00:43     Сравнение 2х массивов за 1 просмотр #6
C++
1
2
3
4
5
6
for(size_t i = 0, j = 0; i < n/*a.size*/ && j < m/*b.size*/;)
    if (a[i] > b[j])
        ++j;
    else if (a[i] < b[j])
        ++i;
    else { c[k++] = a[i]; ++i; ++j; }
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 00:43  [ТС]     Сравнение 2х массивов за 1 просмотр #7
Огромное спасибо за помощь
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516
17.11.2011, 01:20     Сравнение 2х массивов за 1 просмотр #8
Или проще словами (вдруг Вы не поняли смысл):
Новый массив создаём из элементов двух других (допустим массивы A,B и создаём C):
Если в A первый элемент больше первого в B ->переносим элемент из A в C и в A сдвигаемся на позицию вперёд, теперь будем сравнивать уже второй элемент массива А с первым элементом массива B, если он снова окажется большим чем в B то снова переносим его в С и сдвигаемся в А и опять проводим сравнение уже третьего элемента в А с первым элементом в B и больший перенесём в С.

Всё это возможно сделать только потому что массивы отсортированы, иначе такой алгоритм не имел бы никакого смысла. В виде алгоритма это уже Вам написали так что действуйте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 01:26     Сравнение 2х массивов за 1 просмотр
Еще ссылки по теме:

Сравнение массивов C++
Сравнение массивов C++
Сравнение массивов C++
Сравнение массивов объектов C++
Сравнение массивов C++

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

Или воспользуйтесь поиском по форуму:
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 01:26  [ТС]     Сравнение 2х массивов за 1 просмотр #9
Вот то же самое решение, но через указатели. (Вдруг кому-нибудь из других новичков понадобится)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int _tmain(int argc, _TCHAR* argv[])
{
int a[13]={1,2,3,4,5,6,7,8,9,10,18,23,45},b[6]={5,6,7,9,11,12},c[10]={0},l,f=0;
    int *uka,*ukb,*ukc;
    uka = &a[0];                        
    ukb = &b[0];
    ukc = &c[0];
 
for(int i = 0, j = 0; i < 13 && j < 6;)
    if (*uka > *ukb)
    {
        ++j;ukb++;
    }else 
        if (*uka < *ukb)
        {
                ++i;uka++;
        }else { ukc = uka;
        cout<<*ukc<<endl;
    ++i; ++j;uka++;ukb++; ukc++; }
    return 0;
}
Yandex
Объявления
17.11.2011, 01:26     Сравнение 2х массивов за 1 просмотр
Ответ Создать тему
Опции темы

Текущее время: 14:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru