Untitled

 avatar
unknown
plain_text
a year ago
3.0 kB
8
Indexable
/*------------------------------------
        Здравствуй, человек!
        Чтобы получить ключ
        поработай с комментариями.
-------------------------------------*/

#include <stdio.h>
#define NMAX 10

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

/*------------------------------------
        Функция получает массив данных
        через stdin.
        Выдает в stdout особую сумму
        и сформированный массив
        специальных элементов
        (выбранных с помощью найденной суммы):
        это и будет частью ключа
-------------------------------------*/
int main() {
  int data1[NMAX], n;
  if (!input(data1, &n)) {
    int sum = 0;
    if (!sum_numbers(data1, n, &sum)) {
      int data2[NMAX], length;
      length = find_numbers(data1, n, sum, data2);
      output(data2, length, sum);
    }
  }
  return 0;
}

int input(int *buffer, int *length) {
  int err = 0;
  if (scanf("%d", length) && (getchar() == '\n') && (*length > 0) &&
      (*length <= NMAX)) {
    char ch;
    for (int i = 0; i < *length; i++) {
      if (scanf("%d", &buffer[i])) {
        ch = getchar();
        if ((ch != '\n' && ch != ' ') || (ch == '\n' && i < *length - 1) ||
            (ch != '\n' && i >= *length - 1)) {
          err = 1;
        }
      } else {
        err = 1;
      }
      if (err == 1) {
        break;
      }
    }
  } else {
    err = 1;
  }
  if (err == 1) {
    printf("n/a");
  }
  return err;
}

/*------------------------------------
        Функция должна находить
        сумму четных элементов
        с 0-й позиции.
-------------------------------------*/
int sum_numbers(int *buffer, int length, int *sum) {
  int err = 0, count = 0;

  for (int i = 0; i < length; i++) {
    if (buffer[i] % 2 == 0) {
      *sum += buffer[i];
      count++;
    }
  }
  if (!count) {
    err = 1;
    printf("n/a");
  }
  return err;
}

/*------------------------------------
        Функция должна находить
        все элементы, на которые нацело
        делится переданное число и
        записывает их в выходной массив.
-------------------------------------*/
int find_numbers(int *buffer, int length, int number, int *numbers) {
  int j = 0;
  for (int i = 0; i < length; i++) {
    if (buffer[i] != 0) {
      if (number % buffer[i] == 0) {
        numbers[j] = buffer[i];
        j++;
      }
    }
  }
  return j;
}

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