Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
1

Массив L[N] – упорядочен по возрастанию, массив Y[N]- упорядочен по убыванию. Сформировать массив Z из элементов массива

01.11.2018, 07:26. Просмотров 1691. Ответов 15
Метки нет (Все метки)

Массив L[N] – упорядочен по возрастанию, массив Y[N]- упорядочен по убыванию. Сформировать массив Z из элементов массива L и Y, упорядочив их по возрастанию. Перегруппировку элементов массива Z не осуществлять.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2018, 07:26
Ответы с готовыми решениями:

Если массив А упорядочен по возрастанию, то упорядочить его по убыванию
Дан вещественный массив A. Если массив А упорядочен по возрастанию, то упорядочить его по убыванию,...

Проверить, упорядочен ли массив по возрастанию
Проверить, упорядочен ли массив по возрастанию. Ввод Вводится число элементов массива n и сам...

Сформировать третий массив на основе данных исходных массивов, который также упорядочен
В общем, задание следующее: 1. Даны два целочисленных массива 2. Реализуйте алгоритмы сортировок...

Разделить массив на два отдельных массива, отсортировать один массив по убыванию, а второй - по возрастанию
Помогите пожалуйста. Дан массив из 20 целых чисел, расположенных в случайном порядке. Половина...

Сформировать массив Z из элементов массива Х и Y, упорядочивая их по возрастанию
Массив Х – упорядочен по возрастанию, массив Y- упорядочен по убыванию. Сформировать массив Z из...

15
FFPowerMan
292 / 199 / 87
Регистрация: 11.10.2018
Сообщений: 1,401
01.11.2018, 07:31 2
В чем проблема?
Можете посмотреть сортировку слиянием - для начала.
Алгоритм будет такой что мы сначала создаем динамический массив размеров 2*N. Потом мы проходим циклом по 2-ум массивам L и Y. Выбираем наименьший элемент и считаем их(на случай если их несколько). - Запоминаем его.
Потом также ищем следующий элемент начиная от этого наименьшего, но не включая его. - Зацикливаем, пока не пройдем по всем элементам.
0
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
01.11.2018, 08:54  [ТС] 3
Можете представить в виде кода? Я попробывал как вы сказали но чего-то не идет((
0
FFPowerMan
292 / 199 / 87
Регистрация: 11.10.2018
Сообщений: 1,401
01.11.2018, 09:42 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//---------------------------------------------------------------------------
#include <vcl>
#include <iostream>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
#define N 12
 
int main()
{
    int L[N] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13},
        Y[N] = {500, 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489},
        Z[2*N] = {0}, F, D, Min, Nomer;
    bool MaskL[N] = {0},
         MaskY[N] = {0},  //1 - esli element v mssivah L[] i Y[] prosmotren
         MassivL;  //true - Min element v massive L[], inache v Y[]
            
    for(F = 0; F < (2*N); F++)  //Cycle po elementam massiva Z[]
    {
        MassivL = false;
        //Ishem pervii 0
        for(D = 0; D < N; D++)
            if(!MaskL[D])//MaskL[D] = 0
            {
                //Naiden = true;
                Min = L[D];    //Sohranyaem Min element
                Nomer = D;
                MassivL = true;
                break;
            }
        if(!MassivL)
            for(D = 0; D < N; D++)
                if(!MaskY[D])//MaskY[D] = 0
                {
                    Min = Y[D];    //Sohranyaem Min element
                    Nomer = D;
                    break;
                }
 
        //1 - Massiv L
        if(MassivL)
          for(D = 0; D < N; D++)
          {
              if(!MaskL[D])
                  if(Min > L[D])
                  {
                      Min = L[D];
                      Nomer = D;
                      MassivL = true;
                  }
          }
        else  //2 - Massiv Y
          for(D = 0; D < N; D++)
          {
              if(!MaskY[D])
                  if(Min > Y[D])
                  {
                      Min = Y[D];
                      Nomer = D;
                      MassivL = false;  //Min legit v massive Y[]
                  }
          }
 
        //Pomechaem v maske
        if(MassivL)
          MaskL[Nomer] = true;
        else
          MaskY[Nomer] = true;
 
        //Pishem Min v Z[]
        Z[F] = Min;
    }
 
    //Vivodim Z[]
    for(F = 0; F < (2*N); F++)
        cout << Z[F] << " ";
    cout << "\n";
 
    system("pause");
    return 0;
}
0
01.11.2018, 09:42
TrollHammer
759 / 490 / 236
Регистрация: 22.02.2018
Сообщений: 1,445
Записей в блоге: 2
01.11.2018, 09:46 5
FFPowerMan, Код как-то не сишный, а плюсовой
0
FFPowerMan
292 / 199 / 87
Регистрация: 11.10.2018
Сообщений: 1,401
01.11.2018, 09:48 6
Ну вывод на printf() переправить. Я думаю автор это осилит.
0
TrollHammer
759 / 490 / 236
Регистрация: 22.02.2018
Сообщений: 1,445
Записей в блоге: 2
01.11.2018, 09:49 7
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Я думаю автор это осилит
А с объявлением типа bool и обнулением массивов в стиле С++ что ему делать?
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10618 / 6301 / 1581
Регистрация: 25.07.2009
Сообщений: 12,015
01.11.2018, 11:07 8
Лучший ответ Сообщение было отмечено Lepricon228 как решение

Решение

Всегда восхищался способностью делать простое сложным. Это же банальная функция merge, только второй индекс из хвоста в начало
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
#include <stdio.h>
 
#define N (5)
 
int main(void) {
    int L[N] = { 1, 3, 5, 7, 9 };
    int Y[N] = { 8, 6, 4, 2, 0 };
    int Z[N * 2], i = 0, j = N - 1, k = 0;
    
    while ( i < N && j >= 0 ) {
        if ( L[i] < Y[j] )
            Z[k++] = L[i++];
        else
            Z[k++] = Y[j--];
    }
    while ( i < N )
        Z[k++] = L[i++];
    while ( j >= 0 )
        Z[k++] = Y[j--];
    
    for ( k = 0; k < N * 2; ++k )
        printf("%d ", Z[k]);
    printf("\n");
    
    return 0;
}
1
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 10:17  [ТС] 9
А с разными размерностями ?

Добавлено через 1 час 7 минут
Ваша программа не работает с другой ими числами, и после сортировки пузырьком
0
Kuzia domovenok
2839 / 2426 / 621
Регистрация: 25.03.2012
Сообщений: 8,639
Записей в блоге: 1
Завершенные тесты: 1
03.11.2018, 10:30 10
Lepricon228, С другими числами всё работает
C++
1
2
    int L[N] = { 31, 43, 45, 97, 99 };
    int Y[N] = { 98, 76, 44, 32, 0 };
Прями руки. Проблема в твоей сортировке. Ты точно сортируешь один массив по возрастанию, а второй именно по убыванию?
0
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 12:37  [ТС] 11
Вот код:
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
#include <stdio.h>
#include <stdlib.h>
 
#define N (5)
 
int main(void) {
    int L[5];
    int Y[5];
    int Z[N * 2], i = 0, j = N - 1, k = 0;
    for(i=0;i<N;i++)
        {scanf("%d ", &L[i]);}
        for(i=0;i<6;i++)
        {printf("%d ", L[i]);}
        for(i=0;i<N;i++)
        {scanf("%d ", &Y[i]);}
        for(i=0;i<N;i++)
        {printf("%d ", Y[i]);}
    while ( i < N && j >= 0 ) {
        if ( L[i] < Y[j] )
            Z[k++] = L[i++];
        else
            Z[k++] = Y[j--];
    }
    while ( i < N )
        Z[k++] = L[i++];
    while ( j >= 0 )
        Z[k++] = Y[j--];
 
    for ( k = 0; k < N * 2; ++k )
        printf("%d ", Z[k]);
    printf("\n");
 
    return 0;
}
А вот что выдает компилятор:
Массив L[N] – упорядочен по возрастанию, массив Y[N]- упорядочен по убыванию. Сформировать массив Z из элементов массива

Помимо того что он просит ввести на 1 число больше в первом массиве, так он ещё и пургу какую-то выдает в конце, сортировку я убрал.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10618 / 6301 / 1581
Регистрация: 25.07.2009
Сообщений: 12,015
03.11.2018, 13:07 12

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Прями руки.
Обычно против подобных замечаний, но не в этот раз...


Цитата Сообщение от Lepricon228 Посмотреть сообщение
он просит ввести на 1 число больше в первом массиве
Сколько задал, столько и просит
Цитата Сообщение от Lepricon228 Посмотреть сообщение
int L[5];
Цитата Сообщение от Lepricon228 Посмотреть сообщение
for(i=0;i<6;i++)
Напиши i<7 - будет два "лишних" просить. Вопрос, куда это "лишнее" значение запишется.
И кстати, никакой
Цитата Сообщение от Lepricon228 Посмотреть сообщение
сортировки пузырьком
вообще не видно.
0
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 15:17  [ТС] 13
Хорошо, проблема решена, но далее в выводе всё равно какая-то капуста выходит

Добавлено через 2 часа 6 минут
Факт в том что я пытаюсь сделать ввод, но при вводе мне выбивает какую-то фигню.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10618 / 6301 / 1581
Регистрация: 25.07.2009
Сообщений: 12,015
03.11.2018, 15:23 14
Lepricon228, держи, играйся
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
#define MIN_VAL (-10)
#define MAX_VAL (10)
#define bounded_rand() ( rand() % ( MAX_VAL - MIN_VAL + 1 ) + MIN_VAL )
 
void int_swap(int * a, int * b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
 
void bubble_sort_ascendant(int * array, int size) {
    int i, j;
    
    for ( i = 0; i < size - 1; ++i )
        for ( j = i + 1; j < size; ++j )
            if ( array[i] > array[j] )
                int_swap(array + i, array + j);
}
 
void bubble_sort_descendant(int * array, int size) {
    int i, j;
    
    for ( i = 0; i < size - 1; ++i )
        for ( j = i + 1; j < size; ++j )
            if ( array[i] < array[j] )
                int_swap(array + i, array + j);
}
 
void two_way_merge(int * pAhead, int sAhead, int * pReversed, int sReversed, int * pMerged) {
    int i = 0, j = sReversed - 1, k = 0;
    
    while ( i < sAhead && j >= 0 ) {
        if ( pAhead[i] < pReversed[j] )
            pMerged[k++] = pAhead[i++];
        else
            pMerged[k++] = pReversed[j--];
    }
    
    while ( i < sAhead )
        pMerged[k++] = pAhead[i++];
    
    while ( j >= 0 )
        pMerged[k++] = pReversed[j--];
}
 
int manual_array_fill(int * array, int size) {
    int i;
    
    for ( i = 0; i < size; ++i ) {
        printf("ARRAY[%d] = ", i);
        if ( scanf("%d", array + i) != 1 )
            return -1;
    }
    
    return 0;
}
 
void random_array_fill(int * array, int size) {
    while ( size-- )
        *array++ = bounded_rand();
}
 
void dump_array(int * array, int size) {
    while ( size-- )
        printf("%d%c", *array++, ( size ) ? ' ' : '\n');
}
 
enum FILL_TYPE { FT_MANUAL = 1, FT_RANDOM = 2 };
 
/***************************************************************/
 
int main(void) {
    int * aArray, aSize, * bArray, bSize, *cArray, cSize, answ;
    
    printf("%d - manual fill, %d - random fill\n> ", FT_MANUAL, FT_RANDOM);
    if ( scanf("%d", &answ) != 1 || answ < FT_MANUAL || answ > FT_RANDOM ) {
        printf("What is wrong with you?\n");
        return 1;
    }
    printf("\n");
    
    printf("First array size: ");
    if ( scanf("%d", &aSize) != 1 || aSize < 1 ) {
        printf("Wrong input!\n");
        return 1;
    }
    
    printf("Second array size: ");
    if ( scanf("%d", &bSize) != 1 || bSize < 1 ) {
        printf("Wrong input!\n");
        return 1;
    }
    printf("\n");
    
    cSize = aSize + bSize;
    aArray = malloc(sizeof(int) * aSize);
    assert(aArray);
    bArray = malloc(sizeof(int) * bSize);
    assert(bArray);
    cArray = malloc(sizeof(int) * cSize);
    assert(cArray);
    
    if ( answ == FT_MANUAL ) {
        printf("First array values:\n");
        if ( manual_array_fill(aArray, aSize) ) {
            printf("Wrong input!\n");
            free(aArray);
            free(bArray);
            free(cArray);
            
            return 1;
        }
        
        printf("\nSecond array values:\n");
        if ( manual_array_fill(bArray, bSize) ) {
            printf("Wrong input!\n");
            free(aArray);
            free(bArray);
            free(cArray);
            
            return 1;
        }
    }
    else {
        srand(time(NULL));
        
        random_array_fill(aArray, aSize);
        random_array_fill(bArray, bSize);
        
        printf("First array values:\n");
        dump_array(aArray, aSize);
        printf("\nSecond array values:\n");
        dump_array(bArray, bSize);
    }
    printf("\n");
    
    bubble_sort_ascendant(aArray, aSize);
    printf("First array ascendant sorted:\n");
    dump_array(aArray, aSize);
    
    bubble_sort_descendant(bArray, bSize);
    printf("Second array descendant sorted:\n");
    dump_array(bArray, bSize);
    
    printf("\n");
    
    two_way_merge(aArray, aSize, bArray, bSize, cArray);
    printf("Merged array:\n");
    dump_array(cArray, cSize);
    
    free(aArray);
    free(bArray);
    free(cArray);
    
    return 0;
}
0
Kuzia domovenok
2839 / 2426 / 621
Регистрация: 25.03.2012
Сообщений: 8,639
Записей в блоге: 1
Завершенные тесты: 1
03.11.2018, 15:24 15
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Проблема в твоей сортировке.
посмотрите на меня, да я же Ванга!
0
Lepricon228
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 15:25  [ТС] 16
хм...(( всё заработало(руки выпрямил). Спасибо.
0
03.11.2018, 15:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2018, 15:25

Сформировать массив, содержащий упорядоченные по возрастанию целые части элементов исходного массива
С произвольного одномерного массива действительных чисел сформировать массив, содержащий...

Сформировать массив B из квадратных корней и массив C из квадратов элементов массива A
Ввести массив A из 15 целочисленных элементов.Сформировать массив B из квадратных корней и массив C...

Сформировать массив В из положительных элементов массива А и массив С из отрицательных элементов А
Доброго времени суток! помогите,пожалуйста, решить задачу: Дан массив А. Сформировать массив В из...


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

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

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