fork download
  1. #include <stdio.h>
  2.  
  3. void input(int *buffer, int *length);
  4. void output(int *buffer, int length);
  5. int sum_numbers(int *buffer, int length);
  6. int find_numbers(int *buffer, int length, int number, int *numbers);
  7.  
  8. /*
  9.   Функция получает массив данных
  10.   через stdin.
  11.   Выдает в stdout особую сумму
  12.   и сформированный массив
  13.   специальных элементов
  14.   (выбранных с помощью найденной суммы):
  15.   это и будет частью ключа
  16. */
  17. int main() {
  18. int length;
  19. int buffer[10]; // Максимальный размер входного массива
  20. int sum;
  21. int new_buffer[10]; // Массив для элементов, на которые делится сумма
  22. int count;
  23.  
  24. input(buffer, &length);
  25.  
  26. sum = sum_numbers(buffer, length); // Рассчитываем сумму чётных элементов
  27.  
  28. // Если сумма равна 0 или нет чётных, выводим "n/a"
  29. if (sum == 0) {
  30. printf("n/a\n");
  31. return 1;
  32. }
  33.  
  34. count = find_numbers(buffer, length, sum, new_buffer); // Ищем элементы, на которые делится сумма
  35.  
  36. // Если нет элементов, выводим "n/a"
  37. if (count == 0) {
  38. printf("n/a\n");
  39. return 1;
  40. }
  41.  
  42. printf("%d\n", sum); // Выводим сумму чётных элементов
  43. output(new_buffer, count); // Выводим отобранные элементы
  44.  
  45. return 0;
  46. }
  47.  
  48. // Функция должна находить сумму четных элементов с 0-й позиции.
  49. int sum_numbers(int *buffer, int length) {
  50. int sum = 0;
  51.  
  52. for (int i = 0; i < length; i++) { // Исправлено начальное условие на 0
  53. if (buffer[i] % 2 == 0) { // Проверяем на четность
  54. sum += buffer[i];
  55. }
  56. }
  57.  
  58. return sum;
  59. }
  60.  
  61. // Функция должна находить все элементы, на которые нацело делится переданное число и записывает их в выходной массив.
  62. int find_numbers(int *buffer, int length, int number, int *numbers) {
  63. int count = 0;
  64.  
  65. for (int i = 0; i < length; i++) {
  66. // Если число не равно нулю и дельное на сумму, добавляем его в выходной массив
  67. if (buffer[i] != 0 && number % buffer[i] == 0) {
  68. numbers[count] = buffer[i]; // Записываем подходящее число
  69. count++;
  70. }
  71. }
  72.  
  73. return count; // Возвращаем количество найденных элементов
  74. }
  75.  
  76. // Функция получает массив данных через stdin.
  77. void input(int *buffer, int *length) {
  78. scanf("%d", length);
  79. for (int i = 0; i < *length; i++) {
  80. scanf("%d", &buffer[i]);
  81. }
  82. }
  83.  
  84. // Функция выводит элементы массива в stdout.
  85. void output(int *buffer, int length) {
  86. for (int i = 0; i < length; i++) {
  87. printf("%d ", buffer[i]);
  88. }
  89. printf("\n");
  90. }
Success #stdin #stdout 0s 5264KB
stdin
10
4 3 9 0 1 2 0 2 7 -1
stdout
8
4 1 2 2 -1