Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
1

задание из книжки с массивами

20.06.2011, 14:20. Показов 682. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
два заведомо упорядоченных массива (например 1,3,6,8,100500 и 3,5,9,10,9000), размер массивов одинаковый. Склеить их в один новый массив длиной в два раза больший, чем они, так, чтобы новый массив был так же упорядочен. Применять сортировку нельзя, иначе задача решается легко

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main ()
{
    int mass1[]={1,2,3,4,5};
    int mass2[]={2,3,4,1,6};
    int mass3[10];
 
    for(int i=0; i<5; i++)
        mass3[i]=mass1[1];
        
    for(int i=5; i<10; i++)
        mass3[i]=mass1[2];
 
    return 0;
}
а как их упорядочить подскажите?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2011, 14:20
Ответы с готовыми решениями:

Задание с массивами
Ребята! Прошу Вашей помощи! Требуется разработать 5 программ которые бы работали с массивами...

Задание с массивами
Помогите пожалуйста с заданием Дан одномерный массив, состоящий из N вещественных элементов. 5.1....

Задание с массивами.
Дан массив {3.24, -0.16, 2.28, -0.16, -3.22, 7.14, 0.88, -3.20, 0.99, 4.15} и в нём нужно :сжать...

Задание по работе с массивами
Задание по работе с массивами: Вводится массив и некоторое число X. Сколько в массиве интервалов,...

8
65 / 65 / 5
Регистрация: 11.01.2009
Сообщений: 130
20.06.2011, 14:21 2
А подумать если?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
20.06.2011, 14:34 3
Olejeg85, в задании говорится об упорядоченных массивах, а mass2 у тебя не такой. Для упорядоченных массивов задача решается просто.
Код попробуй сам написать, а алгоритм такой:
1. Заводим 3 индекса, по одному на массив (i1, i2, i3) и обнуляем их.
2. Пока первый массив не закончился и пока элемент первого массива с индексом i1 не больше элемента второго с индексом i2 переписываем элемент в очередную ячейку третьего массива
3. Пока второй массив не закончился и пока элемент второго массива с индексом i2 не больше элемента первого с индексом i1 переписываем элемент в очередную ячейку третьего массива
4. пункты 2 и 3 повторяются пока не закончатся оба массива

Добавлено через 1 минуту
правда надо учесть ещё, что другой массив мог уже закончится, тогда с его элементами сравнивать не надо.
0
MiThEoN
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
20.06.2011, 14:55 4
Цитата Сообщение от grizlik78 Посмотреть сообщение
2. Пока первый массив не закончился и пока элемент первого массива с индексом i1 не больше элемента второго с индексом i2 переписываем элемент в очередную ячейку третьего массива
3. Пока второй массив не закончился и пока элемент второго массива с индексом i2 не больше элемента первого с индексом i1 переписываем элемент в очередную ячейку третьего массива
4. пункты 2 и 3 повторяются пока не закончатся оба массива
Как то сложновато сказал:

2. В одном цикле проходишь до конца третьего массива
2.1 В этом цикле проверяешь(т.е первое условие), прошел ли ты до конца первого массива(i1 = 5), есди да тогда дописываешь остатки второго массива;
2.2 Второе условие --//-- до конца второго массива(i2 = 5), если да тогда дописываешь остатки первого массива;
2.3 третье условие : сравнивание очередных элементов массивов(1-го и 2-го), и дописываешь в третий минимальный из них

PS: На этапе этих условий, соответствующие индексы увеличиваются

Добавлено через 1 минуту
Я бы все это написал так бы:
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
#include <iostream>
using namespace std;   
#define N1 5
#define N2 6
#define N3 N1+N2
int main()
{
        int mass1[N1]={1,3,5,7,9};
        int mass2[N2]={0,2,3,8,10,13};
    int mass3[N3];
    int j1 = 0,  
        j2 = 0;
    for(int i=0; i<N3; i++)
    {
        if(j1 == N1)
        {
            mass3[i] = mass2[j2];
            j2 ++;
        }
        else if(j2 == N2)
        {
            mass3[i] = mass1[j1] ;
            j1 ++;
        }
        else if(mass1[j1]<mass2[j2])
        {
            mass3[i] = mass1[j1];
            j1 ++;
        }
        else 
        {   
            mass3[i] = mass2[j2];
            j2 ++;
        }
    }
 
    for(int i = 0; i < N3; i ++)
        cout<<mass3[i]<<" ";
    cout<<endl;
    system("pause");
    return 0; 
}
1
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
20.06.2011, 15:00 5
Ну вот что-то не рождаются в моей голове простые конструкции. Я имел в виду такой код
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
#include <iostream>
 
using namespace std;
 
int main ()
{
    int mass1[] = {1, 3, 6, 8, 100500};
    int mass2[] = {3, 5, 9, 10, 9000};
    int const N1 = sizeof(mass1)/sizeof(*mass1);
    int const N2 = sizeof(mass2)/sizeof(*mass2);
    int const N3 = N1 + N2;
    int mass3[N3];
 
    int i1 = 0, i2 = 0, i3 = 0;
    while (i3 < N3 && (i1 < N1 || i2 < N2))
    {
        while (i1 < N1 && ( i2 >= N2 || mass1[i1] <= mass2[i2]))
            mass3[i3++] = mass1[i1++];
 
        while (i2 < N2 && ( i1 >= N1 || mass2[i2] <= mass1[i1]))
            mass3[i3++] = mass2[i2++];
    }
 
    for (int i = 0; i < N3; ++i)
        cout << mass3[i] << " ";
    cout << endl;
 
    return 0;
}
Эх, всё пропало...
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.06.2011, 15:22 6
Все проще
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#error нечитабельный быдлокод
int main(){
    int m1[]={1,2,3,4,8,9,11,12,15},n1=sizeof(m1)/sizeof(*m1),m2[]={1,3,4,5,7,10,14},n2=sizeof(m2)/sizeof(*m2),n3=n1+n2, * newarr = new int[n3];
    for (int i = 0,x = 0, y =0; i < n3; std::cout << newarr[i++] << ' '){
        newarr[i] = (m1[x] < m2[y]?m1[x++]:m2[y++]);
        if (x == n1) m1[--x]=m2[n2-1]+1; if (y == n2) m2[--y]=m1[n1-1]+1; }
        delete[] newarr;
}
1
MiThEoN
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
20.06.2011, 15:29 7
Цитата Сообщение от diagon Посмотреть сообщение
#error нечитабельный быдлокод
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
20.06.2011, 15:46 8
Читаемый, если отформатировать. Но главный недостаток — меняет исходные массивы, к которым вообще может не быть доступа на запись.

Добавлено через 5 минут
Плюс не сможет отсортировать массивы, в которых присутствует максимальное для данного типа число.
0
13 / 10 / 1
Регистрация: 27.03.2011
Сообщений: 164
20.06.2011, 16:18  [ТС] 9
спасибо всем
0
20.06.2011, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2011, 16:18
Помогаю со студенческими работами здесь

Задание с одномерными массивами
Здравствуйте. Помогите, пожалуйста. Нужно ответить на дополнительный вопрос для защиты лабы. По...

задание со строкой и массивами. C++.
Добрый вечер всем. Помогите пожалуйста! Надо написать программу, которая просит пользователя...

Поясните с массивами, как делать это задание
1. Дана последовательность натуральных чисел а1, a2, ..., а20. Определить, есть ли в...

ЗАДАНИЕ С МАССИВАМИ
Дан массив В (n). Найти максимальный элемент и все элементы до него заменить на 7


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru