В массив 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;
}

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

  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
Похожие ответы