Найти количество локальных минимумов и максимумов массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан массив размера N. Найти количество его локальных минимумов1|максимумов2.

Решение задачи: «Найти количество локальных минимумов и максимумов массива»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
 
int main()
{
   int a[N], n_min, n_max, i, k;
   srand(time(NULL));
   for (i = 0; i < N; i++)
   {
       a[i] = rand()%3;
       printf("%d ", a[i]);
   }
   puts("\n");
   n_min = n_max = 0;
   if (a[0] < a[1])
      n_min++;
   else if (a[0] > a[1])
      n_max++;
   k = i = 1;
   while (i < N)
   {
       while (i < N && a[i-1] < a[i])
       {
          i++;
          k++;
       }
       if (k > 1)
       {
          n_max++;
          k = 1;
       }
       while (i < N && a[i-1] > a[i])
       {
          i++;
          k++;
       }
       if (k > 1)
       {
          n_min++;
          k = 1;
       }
       while (i < N && a[i-1] == a[i])
          i++;
   }
   printf("n_min = %d n_max = %d\n", n_min, n_max);
   getchar();
   return 0;
}

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Инициализирует массив a случайными значениями от 0 до 2.
  2. Выводит значения массива на экран.
  3. Инициализирует переменные n_min и n_max, которые будут использоваться для подсчета минимумов и максимумов, соответственно.
  4. Проверяет первую пару значений массива и увеличивает соответствующую переменную (n_min или n_max), если текущее значение меньше (или больше) следующего.
  5. Использует два вложенных цикла while для прохода по массиву и поиска минимумов и максимумов. Внешний цикл while контролирует проход по массиву от второго элемента до предпоследнего. Внутренний цикл while в первой ветке ищет последовательность возрастающих значений (то есть локальный минимум), а во второй ветке - последовательность убывающих значений (то есть локальный максимум).
  6. Если в процессе поиска минимума или максимума обнаруживается, что длина последовательности (k) превышает 1, то увеличивается соответствующая переменная (n_max или n_min) и сбрасывается счетчик k.
  7. После завершения вложенных циклов while выводится количество найденных минимумов и максимумов.
  8. Программа завершается, ожидая нажатия клавиши.

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы