Найти количество локальных минимумов и максимумов массива - 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; }
Объяснение кода листинга программы
Код выполняет следующие действия:
- Инициализирует массив a случайными значениями от 0 до 2.
- Выводит значения массива на экран.
- Инициализирует переменные n_min и n_max, которые будут использоваться для подсчета минимумов и максимумов, соответственно.
- Проверяет первую пару значений массива и увеличивает соответствующую переменную (n_min или n_max), если текущее значение меньше (или больше) следующего.
- Использует два вложенных цикла while для прохода по массиву и поиска минимумов и максимумов. Внешний цикл while контролирует проход по массиву от второго элемента до предпоследнего. Внутренний цикл while в первой ветке ищет последовательность возрастающих значений (то есть локальный минимум), а во второй ветке - последовательность убывающих значений (то есть локальный максимум).
- Если в процессе поиска минимума или максимума обнаруживается, что длина последовательности (k) превышает 1, то увеличивается соответствующая переменная (n_max или n_min) и сбрасывается счетчик k.
- После завершения вложенных циклов while выводится количество найденных минимумов и максимумов.
- Программа завершается, ожидая нажатия клавиши.