Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Эцео
3 / 3 / 0
Регистрация: 18.10.2016
Сообщений: 10
1

Объединение двух упорядоченных массивов

15.02.2017, 21:15. Просмотров 1475. Ответов 3
Метки нет (Все метки)

Даны массив A из N целых элементов массив B из M целых элементов. Оба массива упорядочены по неубыванию. Требуется сформировать и вывести массив упорядоченный по неубыванию массив, состоящий из элементов массивов A и B.
Должен выводить так:
Ввод
7 5
1 3 7 7 40 48 777
7 30 33 666 667
Вывод
1 3 7 7 7 30 33 40 48 666 667 777

Сам код:
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
#include<stdio.h>
 int main() 
 {
    int i, j=0, k=0, c[2002], a[1001], b[1001];
    int na, mb; 
    scanf("%d %d", &na, &mb); 
    for (i=0; i<na; i++)
    {
        scanf("%d", &a[i]); 
    }
    for (i=0; i<mb; i++)
    {
        scanf("%d", &b[i]);
    }
    for (k=0; k<na+mb; k++)
    {
        if (a[i] < b[j]) 
            { 
                c[k]=a[i++];
        }
        else c[k]=b[j++]; 
    }
    for (i=0; i<na+mb; i++) 
        {
            printf(" %d", c[i]); 
    }
    return 0;
 }
Где-то ошибка. Потому что выводит огромные нереальные числа: типа -809076002 -809076002 -85436002
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2017, 21:15
Ответы с готовыми решениями:

Из двух упорядоченных массивов составить третий упорядоченный массив
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; using namespace std; //...

Объединение двух массивов
Здравствуйте, нужна помощь с программой на Си. &quot;Даны два массива х и y, элементы каждого из...

Объединение и пересечение двух массивов
доброго времени суток, нужна помощь со следующим кодом. void BuildGroup(int** group, int* count)...

Слияние двух упорядоченных по убыванию массивов в один, упорядоченный по убыванию
Даны два упорядоченных по убыванию массива W и G. Получите из них путем слияния упорядоченный по...

Обработка упорядоченных массивов
В упорядоченном по неубыванию массиве чисел определить количество чисел, равных заданному числу...

3
avgoor
1047 / 614 / 158
Регистрация: 05.12.2015
Сообщений: 1,744
15.02.2017, 21:54 2
Эцео, перед 15 строкой надо обнулить i и j. Еще надо проверять выход за границы массива (i<na, j<nb) в цикле в 15 строке.
0
Photofenix
61 / 61 / 39
Регистрация: 18.11.2016
Сообщений: 553
Завершенные тесты: 1
15.02.2017, 21:56 3
Цитата Сообщение от Эцео Посмотреть сообщение
по неубыванию
Прикольно.
Цитата Сообщение от Эцео Посмотреть сообщение
Где-то ошибка. Потому что выводит огромные нереальные числа: типа -809076002 -809076002 -85436002
Это выход за пределы массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         int arr[2000];
         // Предположим вы заполнили массив.
 
         for (int i(0); i!=(2000-1); i++){ // Берем размер массива на единицу меньше
             for (int j(0); j!=i; j++){
                 if (arr[j] > arr[j+1]){
                     // Меняем значения местами.
                     int temp = arr[j];
                     arr[j] = arr[j+1];
                     arr[j+1] = temp;
                     // Можно использовать swap (arr[j], arr[j+1]), но так же не интересно, правда:)
                 }
             }
         }
     }
Извиняюсь, я не до конца дочитал вопрос. Но я думаю, что можно создать третий массив, где количество ячеек будет равна сумме количеству ячеек двух массивом. А далее просто отсортировать как вам угодно.
0
zss
Модератор
Эксперт С++
7950 / 7135 / 4451
Регистрация: 18.12.2011
Сообщений: 18,833
Завершенные тесты: 1
15.02.2017, 21:56 4
Лучший ответ Сообщение было отмечено Эцео как решение

Решение

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
#include<stdio.h>
int main() 
{
    int i, j, k, c[2002], a[1001], b[1001];
    int na, mb; 
    scanf("%d %d", &na, &mb); 
    for (i=0; i<na; i++)
    {
        scanf("%d", &a[i]); 
    }
    for (i=0; i<mb; i++)
    {
        scanf("%d", &b[i]);
    }
    i=0;j=0;k=0;
    while(i<na && j<mb)
    {
        if (a[i] < b[j]) 
            c[k++]=a[i++];
        else 
            c[k++]=b[j++]; 
    }
    while(i<na)
        c[k++]=a[i++];
    while(j<mb)
        c[k++]=b[j++]; 
 
    for (i=0; i<k; i++) 
    {
        printf(" %d", c[i]); 
    }
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2017, 21:56

Сформируйте массив С, состоящий из элементов массивов А и В, упорядоченных по возрастанию
Задание : Даны два массива, упорядоченных по возрастанию: А и B. Сформируйте массив C, состоящий из...

Определить объединение двух полей. Первое поле – массив из двух байт, второе – слово
Помогите написать программу( лучше с комментариями чтобы разобраться) Определить объединение из...

Объединение двух строк
Всем привет! Прошу прощения за мою тупость, но вопрос такой: Необходимо отправить вот такой...


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

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

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