fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <limits.h>
  4.  
  5. #define NMAX 30
  6.  
  7. int input(int *a, int *n);
  8. double mean(int *a, int n);
  9. double variance(int *a, int n);
  10. int search_number(int *a, int n, double mean_val, double variance_val);
  11.  
  12. int main() {
  13. int n, data[NMAX];
  14.  
  15. if (input(data, &n) == -1) { // Обработка некорректного ввода
  16. printf("n/a\n");
  17. return 1; // Завершение с кодом ошибки
  18. }
  19.  
  20. double mean_val = mean(data, n); // Вычисляем математическое ожидание
  21. double variance_val = variance(data, n); // Вычисляем дисперсию
  22.  
  23. int result = search_number(data, n, mean_val, variance_val); // Поиск нужного числа
  24. printf("%d\n", result);
  25.  
  26. return 0;
  27. }
  28.  
  29. int input(int *a, int *n) {
  30. if (scanf("%d", n) != 1 || *n < 1 || *n > NMAX) {
  31. return -1; // Возврат -1 в случае ошибки
  32. }
  33. for (int i = 0; i < *n; i++) {
  34. if (scanf("%d", &a[i]) != 1) { // Проверка ввода элементов
  35. return -1; // Возврат -1 в случае ошибки
  36. }
  37. }
  38. return 0; // Успешный ввод
  39. }
  40.  
  41. double mean(int *a, int n) {
  42. double sum = 0.0;
  43. for (int i = 0; i < n; i++) {
  44. sum += a[i];
  45. }
  46. return sum / n; // Возвращаем математическое ожидание
  47. }
  48.  
  49. double variance(int *a, int n) {
  50. double mean_val = mean(a, n);
  51. double sum_squared_diff = 0.0;
  52. for (int i = 0; i < n; i++) {
  53. double diff = a[i] - mean_val;
  54. sum_squared_diff += diff * diff; // Сумма квадратов отклонений
  55. }
  56. return sum_squared_diff / n; // Возвращаем дисперсию
  57. }
  58.  
  59. int search_number(int *a, int n, double mean_val, double variance_val) {
  60. double upper_bound = mean_val + 3 * sqrt(variance_val); // Вершина предела по правилу трех сигм
  61. for (int i = 0; i < n; i++) {
  62. if (a[i] % 2 == 0 && // Четное
  63. a[i] >= mean_val && // Больше или равно среднему
  64. a[i] <= upper_bound && // Меньше или равно среднему + 3 сигмы
  65. a[i] != 0) // Не равно 0
  66. {
  67. return a[i]; // Возвращаем найденное число
  68. }
  69. }
  70. return 0; // Если не найдено, возвращаем 0
  71. }
Success #stdin #stdout 0.01s 5288KB
stdin
4
1 2 3 4
stdout
4