Программа на вход принимает длину массива и массив целых чисел

Программа на вход принимает длину массива и массив целых чисел. В качестве выхода она должна вывести в stdout сумму четных элементов массива и новый сформированный массив из элементов старого, на которые делится нацело подсчитанная ранее сумма. Использовать stdlib.h нельзя. Передача массива в функцию только по указателю. Максимальный размер входного массива - 10. В случае ошибки или отсутствии четных элементов выводить "n/a".

#include <stdio.h>

void input (int *buffer, int *length);
void output (int *buffer, int length);
int sum_numbers(int *buffer, int length);
int find_numbers(int* buffer, int length, int number, int* numbers);
Функция получает массив данных 
через stdin.
Выдает в stdout особую сумму
и сформированный массив 
специальных элементов
(выбранных с помощью найденной суммы):
int main()
{
    int length;
    int buffer[length];
    input(buffer, &length);
    return 0;
}
Функция должна находить
сумму четных элементов 
с 0-й позиции.
int sum_numbers(int *buffer, int length)
{
    int sum = 0;
    
    for (int i = 1; i < length; i++)
    {
        if (i % 2 != 0)
        {
            sum = sum + buffer[i];
        }
    }
    
    return sum;
    printf("%d\n", sum);
}
Функция должна находить
все элементы, на которые нацело
делится переданное число и
записывает их в выходной массив.
{
//  int tmp;
    int div = sum_numbers(buffer, length);
    int new_arr;
    for (int i = 0; i < length; i++) {
        if (div % buffer[i] == 0) {
            new_arr[i] = new_arr[i] + buffer[i];
        }
    }
    output(new_arr, length);
    return 0;
}


void input(int *buffer, int *length) {
    char end;
    if (scanf("%d%c", length, &end) == 2 && end == '\n' && *length <= 10)
        for (int i = 0; i < &length; i++) {
            char end;
            if (scanf("%d%c", i, &end) == 2 ||
            (i < length - 1 && end == ' ') || (i == length - 1 && end == '\n'))
            sum_numbers(buffer, *length);
    }
    else 
        printf("n/a");
    }


void output(int *a, int n) {
  for (int i = 0; i < n - 1; i++)
  printf("%d ", a[i]);
  printf("%d", a[n - 1]);
}

Ответы (1 шт):

Автор решения: MBo

Для суммы нужны чётные числа, а не элементы с нечётными индексами

int sum_numbers(int *buffer, int length)
{
    int sum = 0;
    
    for (int i = 0; i < length; i++)
        if (buffer[i] % 2 == 0)
            sum += buffer[i];
    
    printf("%d\n", sum);
    return sum;
}

Новый массив (а не одно число)

int* new_arr = new int[10];
int cnt = 0
for (int i = 0; i < length; i++)
    if (div % buffer[i] == 0) 
        new_arr[cnt++] = buffer[i];

Вывести cnt элементов.

Можно также первым проходом подсчитать, сколько будет нужных элементов, создать new_arr точной длины, заполнить его вторым проходом

→ Ссылка