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

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

Войти
Регистрация
Восстановить пароль
 
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
#1

задание из книжки с массивами - C++

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

два заведомо упорядоченных массива (например 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2011, 14:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос задание из книжки с массивами (C++):

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

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

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

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

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

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

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

Добавлено через 1 минуту
правда надо учесть ещё, что другой массив мог уже закончится, тогда с его элементами сравнивать не надо.
0
VASSUV
MiThEoN
439 / 305 / 20
Регистрация: 31.10.2009
Сообщений: 490
Записей в блоге: 2
Завершенные тесты: 1
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
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
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
diagon
Higher
1936 / 1202 / 49
Регистрация: 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
VASSUV
MiThEoN
439 / 305 / 20
Регистрация: 31.10.2009
Сообщений: 490
Записей в блоге: 2
Завершенные тесты: 1
20.06.2011, 15:29 #7
Цитата Сообщение от diagon Посмотреть сообщение
#error нечитабельный быдлокод
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
20.06.2011, 15:46 #8
Читаемый, если отформатировать. Но главный недостаток — меняет исходные массивы, к которым вообще может не быть доступа на запись.

Добавлено через 5 минут
Плюс не сможет отсортировать массивы, в которых присутствует максимальное для данного типа число.
0
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
20.06.2011, 16:18  [ТС] #9
спасибо всем
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2011, 16:18
Привет! Вот еще темы с ответами:

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

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

Книжки по С++ - C++
Здравствуйте, я учусь на 1 курсе, где нам преподают си++. По сути нам объясняют как употреблять ключевые слова и что они &quot;делают&quot;. Но как...

C++ книжки :) - C++
ребят подскажите какие книжки можно почитать для самых чайников по С++ ? лучше чтоб они были в аудио формате:)


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

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

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