Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
aquarius-a
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
1

соединение двух массивов

11.05.2011, 22:33. Просмотров 1318. Ответов 6
Метки нет (Все метки)

здравствуйте!
есть задача: даны два неубывающих массива x и y. найти их соединение, то есть неубывающий массив z, содержащий их общие элементы, причем каждый элемент должен входить в массив z столько раз, сколько он входит в общей сложности в массивах x и y. написал код, вроде бы все правильно, но не работает :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
using namespace std;
 
int main() {
int x[]={1,2,2,4,6,7,7,8,9},y[]={1,1,2,2,5,7,8},z[20];
size_t i,j,k,m,t=0;
k=sizeof(x)/sizeof(int),m=sizeof(y)/sizeof(int);
for (i=0;i<k;i++)
  {for (j=0;j<m;j++)
   {if (x[i]==y[j]) {z[t]=x[i];z[t+1]=y[j];t++;}}}
t=sizeof(z)/sizeof(int);
for (i=0;i<t;i++) cout<<z[i]<<" ";
 
getch();
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 22:33
Ответы с готовыми решениями:

Поэлементное соединение двух массивов строк с удалением повторяющихся элементов
Например есть два массива: char A = {&quot;abcdefghi&quot;}; char B = {&quot;ihgfedcba&quot;};...

Создать два массива, которые будут содержать: все четные элементы двух массивов; все нечетные элементы двух массивов
Помогите, пожалуйста, с программой.. Ввести с клавиатуры два одномерных...

Соединение массивов. Не могу сообразить.
Задание таково. Создать шаблон функции, а так же к ней тело проги которое...

Соединение двух строк
Из входного потока читается несколько строк. В первой строке вводится число N...

Для заданных двух графов построить их соединение
добрый день! помогите решить задачу: Соединением графов G1 и G2 называется...

6
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 22:50 2
Цитата Сообщение от aquarius-a Посмотреть сообщение
t=sizeof(z)/sizeof(int);
ну это первое что бросилось в глаза, размер массива в твоем случае всегда будет равен 20, т.е. эту строчку просто убрать из программы, потому что мы в циклах for уже посчитали количество элементов массива z.
написано правильно, но алгоритм неверный
0
aquarius-a
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
11.05.2011, 22:56  [ТС] 3
Цитата Сообщение от oinari Посмотреть сообщение
ну это первое что бросилось в глаза, размер массива в твоем случае всегда будет равен 20, т.е. эту строчку просто убрать из программы, потому что мы в циклах for уже посчитали количество элементов массива z.
написано правильно, но алгоритм неверный
а как мне тогда определять массив z, не указывая кол-во элементов? z[] - ошибка. подскажите, в чем ошибка алгоритма?
0
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 23:10 4
Цитата Сообщение от aquarius-a Посмотреть сообщение
а как мне тогда определять массив z, не указывая кол-во элементов?
Да все хорошо я просто говорю что строчка t=sizeof(z)/sizeof(int); не нужна, так как размер статического массива, всегда равен количеству выделенной под него памяти.
Ошибка в том, что считает неправильно и выводит такие числа: 1 1 2 2 2 2 7 7 8
0
aquarius-a
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
11.05.2011, 23:20  [ТС] 5
Цитата Сообщение от oinari Посмотреть сообщение
Да все хорошо я просто говорю что строчка t=sizeof(z)/sizeof(int); не нужна, так как размер статического массива, всегда равен количеству выделенной под него памяти.
Ошибка в том, что считает неправильно и выводит такие числа: 1 1 2 2 2 2 7 7 8
вот то-то и оно...
насчет строчки t=sizeof(z)/sizeof(int) понял.
0
oinari
5 / 5 / 0
Регистрация: 18.10.2009
Сообщений: 69
11.05.2011, 23:59 6
aquarius-a, надо в цикле брать каждый элемент первого массива, и находить количество равных ему элементов в первом и во втором, потом записывать в массив z, количество записей будет равно количеству найденных элементов и так пока не пройдем все числа.

Добавлено через 24 минуты
aquarius-a,
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
int _tmain(int argc, _TCHAR* argv[])
{
    int x[]={1,2,2,4,6,7,7,8,9},y[]={1,1,2,2,5,7,8},z[80];
    size_t i=0,j,k,m,t=0,count,step_fa=0,step_sa=0;
    k=sizeof(x)/sizeof(int), m=sizeof(y)/sizeof(int);
    for (i=0;i<k;i++)
    {
        for (j=0;j<m;j++)
        {
            if (x[i]==y[j])
            {
                for(int step(i+1);step<k;step++)
                    if(x[i]==x[step]) step_fa++;
                    else break;
                for(int step(j+1);step<m;step++)
                    if(y[j]==y[step]) step_sa++;
                    else break;
                for(count = 0 ; count < step_fa+step_sa+2; count++)
                {
                    z[t] = x[i];
                    t++;
                }
                i+=step_fa+1;
                j+=step_sa;
                step_fa=0,step_sa=0;
            }
        }
    }
    for (i=0;i<t;i++) cout<<z[i]<<" ";
    getch();
    return 0;
}
Держи
screenshot:
1
aquarius-a
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
12.05.2011, 00:50  [ТС] 7
oinari, спасибо большое
0
12.05.2011, 00:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 00:50

Соединение двух 32 битных блоков в 64 битный и обратно
Есть переменная __unt64 и две переменных unsigned unsigned int. Могу ли я...

Функция Concat: соединение двух последовательностей произвольного типа и размера
Задача в том, чтобы реализовать функцию соединения двух последовательностей...

Объединение двух массивов
Пожалуйста! Дано два впорядкованих за зростанням масиви A(m) та B(n). Отримати...


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

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

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