В массив 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д