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

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

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

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

16.11.2011, 23:04. Просмотров 816. Ответов 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;
}
Подскажите как это можно сделать с помощью указателей и как без них. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 23:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение 2х массивов за 1 просмотр (C++):

Сравнение массивов: найти максимальное перебором массивов - C++
Добрый вечер такая проблема даны два одномерных массива A, B причем в каждом массиве записанно число по разрядно Задачи найти...

Сравнение 2х массивов в С++ - C++
Ребята, помогите пожалуйста написать вот такую прогу: Запросить и считать два массива у пользователя (две последовательности целых чисел...

Сравнение массивов - C++
Здраствуйте, как можно сравнить два элемента buffer и asd? Вот код: char* buffer = new char ; char sas = {&quot;123xxx&quot;}; ...

Сравнение массивов - C++
Добрый день! Не удается сравнить два массива q и с. Алгоритм шифрует по алгоритму CRC и необходимо расшифровать сообщение, но при...

Сравнение массивов - C++
нужно сравнить весь массив из 6 элементов ,,кроме последнего,равны ли элементы массива 0 и вывести на экран равны ,или нет.

Сравнение массивов - C++
После заполнения динамического массива числами,в моем случае 1 и 0,компилятор не производит действий,останавливает работу.Спасибо#include...

8
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
16.11.2011, 23:15 #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; }
Как-то так.
1
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
16.11.2011, 23:42  [ТС] #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; }
0
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 00:12 #4
В моев коде a, b, c были векторами (#include <vector>), но я думаю не составит труда переделать под обычные массивы, если так хочется.

Я всего лишь описал алгоритм. Так как массивы отсортированы, то идем по ним параллельно. Если какой-то элемент меньше, то по тому массиву и двигаемся дальше. Если элементы равны, то записываем этот элемент в массив с.
1
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 00:15  [ТС] #5
Никогда не работал с векторами . буду очень благодарен, если поясните как переделать под массивы.
В общем суть я понял. Спасибо.
0
prazuber
110 / 110 / 3
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 00:43 #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; }
1
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 00:43  [ТС] #7
Огромное спасибо за помощь
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
17.11.2011, 01:20 #8
Или проще словами (вдруг Вы не поняли смысл):
Новый массив создаём из элементов двух других (допустим массивы A,B и создаём C):
Если в A первый элемент больше первого в B ->переносим элемент из A в C и в A сдвигаемся на позицию вперёд, теперь будем сравнивать уже второй элемент массива А с первым элементом массива B, если он снова окажется большим чем в B то снова переносим его в С и сдвигаемся в А и опять проводим сравнение уже третьего элемента в А с первым элементом в B и больший перенесём в С.

Всё это возможно сделать только потому что массивы отсортированы, иначе такой алгоритм не имел бы никакого смысла. В виде алгоритма это уже Вам написали так что действуйте
1
rmb
1 / 1 / 0
Регистрация: 16.11.2011
Сообщений: 18
17.11.2011, 01:26  [ТС] #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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 01:26
Привет! Вот еще темы с ответами:

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

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

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

Сравнение двух массивов - C++
что не так,, введеный массив должен быть равен заданому,.. #include &lt;iostream.h&gt; int main() { int arr; int i=0; int...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
17.11.2011, 01:26
Ответ Создать тему
Опции темы

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