В массив C поместить макcимальные элементы из массивов A и B - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В общем, есть два массива(A и B ) по n элементов, и есть 3 (C) массив, который должен состоять из 8 элементов. Нужно в массив C поместить макcимальные элементы из массивов A и B и посчитать сколько элементов из массива А попало в массив С. Подскажите как правильно сравнить элементы массивов и поместить их в массив С. Я пробовал сортировать их по возрастанию и сразу все элементы помещал в массив С и выводить только последние 8 элементов массива С, но так неправильно
Листинг программы
  1. scanf("%d",&n);
  2. int *arra = new int[n];
  3. for (int i = 0; i < n; i++)
  4. {
  5. arra[i] = rand() % 100 - 50;
  6. }
  7. scanf("%d",&k);
  8. int *arrb = new int[k];
  9. for (int i = 0; i < k; i++)
  10. {
  11. arrb[i] = rand() % 100 - 50;
  12. }
  13. int x =n + k;
  14. int *arrc = new int[n + k];
  15. for (int i = 0; i<n; i++)
  16. {
  17. arrc[i] = arra[i];
  18. }
  19. for (int i = n; i<x; i++)
  20. {
  21. arrc[i] = arrb[i - n];
  22. }
  23. .......................................................
  24. .......................................................
  25. printf("\nОтсоритрованный массив\n");
  26. for (int i =8; i < x; i++)
  27. {
  28. printf(" %d", arrc[i]);
  29. }

Решение задачи: «В массив C поместить макcимальные элементы из массивов A и B»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define N 30
  5.  
  6. int main(int argc, char** argv)
  7. {
  8.     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 };
  9.     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  };
  10.    
  11.     int C[8], took_from_a = 0;
  12.    
  13.     for(int i = 0; i < 8; ++i)
  14.     {
  15.         int a_max = 0, a_pos = -1, b_max = 0, b_pos = -1;
  16.        
  17.         for(int j = 0; j < N; ++j)
  18.         {
  19.             if(A[j] > a_max) { a_max = A[j]; a_pos = j; }
  20.            
  21.             if(B[j] > b_max) { b_max = B[j]; b_pos = j; }
  22.         }
  23.        
  24.         if(a_max > b_max)
  25.         {
  26.             C[i] = a_max; A[a_pos] = -1; took_from_a++;
  27.         }
  28.         else
  29.         {
  30.             C[i] = b_max; B[b_pos] = -1;
  31.         }
  32.     }
  33.    
  34.     for(int i = 0; i < 8; ++i)
  35.     {
  36.         printf("%d%c", C[i], (i != 7) ? ' ' : '\n');
  37.     }
  38.    
  39.     printf("C contains %d elements from A and %d from B\n", took_from_a, 8 - took_from_a);
  40.            
  41.     return EXIT_SUCCESS;
  42. }

Объяснение кода листинга программы

  1. Объединяем два массива в один C, используя значения максимальных элеменментов из A и B.
  2. Для каждого элемента массива C проверяем, какой из массивов A и B содержит больший элемент, и записываем его в C.
  3. Если элемент с максимальным значением находится в A, то записываем его в C и заменяем этот элемент в A на -1 (это необходимо для того, чтобы в дальнейшем не повторять выбор максимального элемента из A).
  4. Если элемент с максимальным значением находится в B, то записываем его в C и заменяем этот элемент в B на -1.
  5. Выводим значения элементов массива C на экран.
  6. Выводим сообщение о том, сколько элементов было взято из A и сколько из B.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы