Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740

Объединить 2 массива в один, в котором все числа идут по убыванию

09.06.2014, 22:56. Показов 2363. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Мне нужно объединить 2 массива в один, в котором все числа идут по убыванию. Вот подробности задачи.

Текстовый файл merge.dat содержит четыре строки. В первой строке записано натуральное число N (1 ≤ N ≤ 100 000) — количество дуболомов в первой шеренге.

Вторая строка содержит N натуральных чисел, записанных через пробел. Числа идут в невозрастающем порядке. Каждое число лежит в диапазоне от 1 до 1 000 000 000.

В третьей строке записано натуральное число M (1 ≤ M ≤ 100 000) — количество дуболомов во второй шеренге.

Четвертая строка содержит M натуральных чисел, записанных через пробел. Числа идут в невозрастающем порядке. Каждое число лежит в диапазоне от 1 до 1 000 000 000.

Формат выходного файла merge.sol

Текстовый файл merge.sol должен содержать N+M чисел, идущих в невозрастающем порядке. Каждое число — это рост соответствующего дуболома из первой или из второй шеренги. Каждое число должно выводиться в отдельную строку.

У меня есть предположения, что раз числа идут в невозрастающем порядке, то 2 массива нужно сначала отсортировать по убыванию, а потом слить вместе процедурой слияния.
Я так понимаю, что для слияния нужно использовать этот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template<class T> void Merge(T const *const A, int const nA,
                             T const *const B, int const nB,
                             T *const C)
{ //Выполнить слияние массива A, содержащего nA элементов,
  //  и массива B, содержащего nB элементов.
  //  Результат записать в массив C.
 
    int a(0), b(0); //Номера текущих элементов в массивах A и B
 
    while( a+b < nA+nB ) //Пока остались элементы в массивах
    {
        if( (b>=nB) || ( (a<nA) && (A[a]<=B[b]) ) )
        { //Копирую элемент из массива A
            C[a+b] = A[a];
            ++a;
        } else { //Копирую элемент из массива B
            C[a+b] = B[b];
            ++b;
        }
    }
}
Скажите, этот код подходит? Если да, то как изменить его, чтоб числа в массиве С шли по убыванию?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2014, 22:56
Ответы с готовыми решениями:

Определите процедуру p (х,у),которая создает массив, в котором сначала идут все положительные числа исходного, а потом все остальные
определите процедуру p (х,у),которая для данного массива х создает массив у,состоящий из элементов массива х ,но переставленныхчто сначала...

Сформировать второй массив, в котором сначала идут все элементы первого массива, кратные 5, а затем все остальные
1 / Дан одномерный массив из 30 элементов. Сформировать второй массив, в котором сначала идут все элементы первого массива, кратные 5, а...

Объединить два упорядоченных по возрастанию массива в один, упорядоченный по убыванию
Здравствуйте, форумчане. Помогите пожалуйста сделать реализацию программы, задача: У меня получилось следующее: #include...

24
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 17:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Та же ошибка.
И? Вопрос в чём? Отчего возникает такая ошибка? Ответ:
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
HEAP CORRUPTION DETECTED
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
10.06.2014, 17:19
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Так мне нужно long long, так как
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Каждое число лежит в диапазоне от 1 до 1 000 000 000.
ну и зачем тебе long long ???
диапазон числа int от -2147483648 до 2147483647
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
int *a = new int[n];
выделяем память под int
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
scanf("%lld", &a[i]);
вводим long long
ниче что он в два раза длиннее?
в массиве каша
2
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
10.06.2014, 17:23  [ТС]
alsav22, Я не понял вас. Во второй программе я ввожу размер массива, элементы массива и массив потом сортируется алгоритмом слияния. После ввода элементов массива и нажатия Enter выводит ошибку
Цитата Сообщение от alsav22 Посмотреть сообщение
HEAP CORRUPTION DETECTED
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.06.2014, 17:25
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Я не понял вас.
Странно, что не поняли...
Запись за границу памяти (j не должно быть равно last):
C++
1
2
3
4
5
6
7
8
int *mas=new int[last];
...
for (j = first; j <= last; j++)
{
    ....
    mas[j] = 
...
}
Чтение оттуда же:
C++
1
2
3
4
for (j = first; j <= last; j++)
{
      A[j] = mas[j];
     ...
1
17 / 17 / 6
Регистрация: 10.12.2013
Сообщений: 740
10.06.2014, 17:32  [ТС]
ValeryS, alsav22, Спасибо вам. И действительно, все дело было в long long.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2014, 17:32
Помогаю со студенческими работами здесь

Сформировать массив, в котором сначала идут все элементы заданного массива, кратные 5, а затем - остальные...
Дан одномерный массив из 30 элементов. Сформировать второй массив, в котором сначала идут все элементы первого массива, кратные 5, а затем...

Получить из массива новый в котором сначала идут положительные числа, затем нули и потом отрицательные
Дан массив Х(N). Получить новый массив Y(N), такой, что в нем сначала идут положительные числа, затем нулевые, и затем отрицательные из X. ...

Массив: Вывести массив, где сначала идут все числа > 0 исходного массива, а все отрицательные числа заменить 0...
Помогите пожалуйста написать программу, где надо сначала создать 8-значный массив, а потом вывести другой , где сначала будут все...

Объединить два двумерных массива размерностью N*N в один, так, чтобы все строки первого массива стали чётными
Объединить два двумерных массива размерностью N*N в один, так, чтобы все строки первого массива стали чётными в новом массиве,а строки...

Объединить элементы 2-х массивов в один массив, содержащий все различные числа
Помогите пожалуйста составить программу: Даны 2 последовательности из целых чисел: a1, ..., an и b1, ..., bm. Объединить элементы этих...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru