В массив C поместить макcимальные элементы из массивов A и B - C (СИ)
Формулировка задачи:
В общем, есть два массива(A и B ) по n элементов, и есть 3 (C) массив, который должен состоять из 8 элементов. Нужно в массив C поместить макcимальные элементы из массивов A и B и посчитать сколько элементов из массива А попало в массив С. Подскажите как правильно сравнить элементы массивов и поместить их в массив С. Я пробовал сортировать их по возрастанию и сразу все элементы помещал в массив С и выводить только последние 8 элементов массива С, но так неправильно
Листинг программы
- scanf("%d",&n);
- int *arra = new int[n];
- for (int i = 0; i < n; i++)
- {
- arra[i] = rand() % 100 - 50;
- }
- scanf("%d",&k);
- int *arrb = new int[k];
- for (int i = 0; i < k; i++)
- {
- arrb[i] = rand() % 100 - 50;
- }
- int x =n + k;
- int *arrc = new int[n + k];
- for (int i = 0; i<n; i++)
- {
- arrc[i] = arra[i];
- }
- for (int i = n; i<x; i++)
- {
- arrc[i] = arrb[i - n];
- }
- .......................................................
- .......................................................
- printf("\nОтсоритрованный массив\n");
- for (int i =8; i < x; i++)
- {
- printf(" %d", arrc[i]);
- }
Решение задачи: «В массив C поместить макcимальные элементы из массивов A и B»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #define N 30
- int main(int argc, char** argv)
- {
- int A[N] = { 64, 37, 61, 91, 67, 60, 14, 99, 74, 61, 100, 12, 68, 1, 37, 88, 20, 67, 26, 41, 56, 95, 14, 22, 79, 50, 72, 42, 95, 22 };
- int B[N] = { 45, 23, 23, 33, 7, 92, 43, 48, 45, 11, 95, 10, 17, 81, 75, 33, 75, 60, 11, 78, 77, 57, 68, 71, 69, 59, 78, 51, 68, 89 };
- int C[8], took_from_a = 0;
- for(int i = 0; i < 8; ++i)
- {
- int a_max = 0, a_pos = -1, b_max = 0, b_pos = -1;
- for(int j = 0; j < N; ++j)
- {
- if(A[j] > a_max) { a_max = A[j]; a_pos = j; }
- if(B[j] > b_max) { b_max = B[j]; b_pos = j; }
- }
- if(a_max > b_max)
- {
- C[i] = a_max; A[a_pos] = -1; took_from_a++;
- }
- else
- {
- C[i] = b_max; B[b_pos] = -1;
- }
- }
- for(int i = 0; i < 8; ++i)
- {
- printf("%d%c", C[i], (i != 7) ? ' ' : '\n');
- }
- printf("C contains %d elements from A and %d from B\n", took_from_a, 8 - took_from_a);
- return EXIT_SUCCESS;
- }
Объяснение кода листинга программы
- Объединяем два массива в один C, используя значения максимальных элеменментов из A и B.
- Для каждого элемента массива C проверяем, какой из массивов A и B содержит больший элемент, и записываем его в C.
- Если элемент с максимальным значением находится в A, то записываем его в C и заменяем этот элемент в A на -1 (это необходимо для того, чтобы в дальнейшем не повторять выбор максимального элемента из A).
- Если элемент с максимальным значением находится в B, то записываем его в C и заменяем этот элемент в B на -1.
- Выводим значения элементов массива C на экран.
- Выводим сообщение о том, сколько элементов было взято из A и сколько из B.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д