Загрузка данных


#include <stdio.h>

#define NMAX 10

int check_tail(void);
void input(int *buffer, int *length);
void output(int *buffer, int length);
int sum_numbers(int *buffer, int length);
int has_even_number(int *buffer, int length);
int find_numbers(int *buffer, int length, int number, int *numbers);

int main(void) {
    int length;
    int buffer[NMAX];
    int numbers[NMAX];
    int sum;
    int count;

    input(buffer, &length);

    if (length > 0 && has_even_number(buffer, length)) {
        sum = sum_numbers(buffer, length);
        count = find_numbers(buffer, length, sum, numbers);

        printf("%d\n", sum);
        output(numbers, count);
    } else {
        printf("n/a");
    }

    return 0;
}

int check_tail(void) {
    int ch;
    int result = 1;

    while ((ch = getchar()) != '\n' && ch != EOF) {
        if (ch != ' ' && ch != '\t') {
            result = 0;
        }
    }

    return result;
}

void input(int *buffer, int *length) {
    int result = 1;
    int i = 0;

    if (scanf("%d", length) != 1 || *length <= 0 || *length > NMAX) {
        result = 0;
    }

    while (result && i < *length) {
        if (scanf("%d", buffer + i) != 1) {
            result = 0;
        }

        i++;
    }

    if (result && !check_tail()) {
        result = 0;
    }

    if (!result) {
        *length = 0;
    }
}

void output(int *buffer, int length) {
    int i = 0;

    while (i < length) {
        if (i > 0) {
            printf(" ");
        }

        printf("%d", *(buffer + i));
        i++;
    }
}

int sum_numbers(int *buffer, int length) {
    int sum = 0;
    int i = 0;

    while (i < length) {
        if (*(buffer + i) != 0 && *(buffer + i) % 2 == 0) {
            sum += *(buffer + i);
        }

        i++;
    }

    return sum;
}

int has_even_number(int *buffer, int length) {
    int result = 0;
    int i = 0;

    while (!result && i < length) {
        if (*(buffer + i) != 0 && *(buffer + i) % 2 == 0) {
            result = 1;
        }

        i++;
    }

    return result;
}

int find_numbers(int *buffer, int length, int number, int *numbers) {
    int count = 0;
    int i = 0;

    while (i < length) {
        if (*(buffer + i) != 0 && number % *(buffer + i) == 0) {
            *(numbers + count) = *(buffer + i);
            count++;
        }

        i++;
    }

    return count;
}