А в чем собственно проблема? Дан массив, можно с помощью цикла по порядку перебрать все его элементы. В теле цикла простое условие на определение взаимоотношения между соседними элементами (между i-ым и i-1, например) . Если элемент i-1 уже является элементом монотонности, то i-ый рассматривается как ее продолжение, если он в нее вписывается, если не вписывается, что фиксируется конец монотонности на i-1, и i-ый переходит в категорию "новая монотонность". При каждом случае окончания монотонности увеличивать счетчик на +1.
Важно помнить:
1. при таких условиях, что описал я, цикл начинается со 2-ого элемента, т. к. 0-ой и 1-ый автоматически образуют одну из монотонности (нужно только с самого начала выяснить ее показатель) ;
2. нужно иметь показатель монотонности: 0 - убывающая, 1 - возрастающая. Это нужно для проверки условия;
3. необходимо в самом начале счетчик приравнять к нуль.
И в итоге счетчик - это и есть ответ на поставленную задачу.
Другие языки программирования и технологии
Дан массив размера N.Определить количество его промежутков монотонности.
На Scheme вот сделал, хотя, как мне кажется, не оптимальное решение:
(define data '(1 2 3 1 2 3 2 1))
(display data)(newline)
(display
(let loop((data data) (prev 'none) (state 'unknown) (cad 0) (dec 0))
(cond
((null? data) (cons cad dec))
((eqv? prev 'none) (loop (cdr data) (car data) state cad dec))
((eqv? state 'unknown)
(cond
((< prev (car data)) (loop (cdr data) (car data) 'cadence (+ cad 1) dec))
((> prev (car data)) (loop (cdr data) (car data) 'decadence cad (+ dec 1)))
(else (loop (cdr data) (car data) 'unknown cad dec))))
((eqv? state 'cadence)
(cond
((< prev (car data)) (loop (cdr data) (car data) state cad dec))
((> prev (car data)) (loop (cdr data) (car data) 'decadence cad (+ 1 dec)))
(else (loop (cdr data) (car data) 'unknown cad dec))))
(else ; 'decadence
(cond
((< prev (car data)) (loop (cdr data) (car data) 'cadence (+ 1 cad) dec))
((> prev (car data)) (loop (cdr data) (car data) state cad dec))
(else (loop (cdr data) (car data) 'unknown cad dec))))
)
)
)
(newline)
(define data '(1 2 3 1 2 3 2 1))
(display data)(newline)
(display
(let loop((data data) (prev 'none) (state 'unknown) (cad 0) (dec 0))
(cond
((null? data) (cons cad dec))
((eqv? prev 'none) (loop (cdr data) (car data) state cad dec))
((eqv? state 'unknown)
(cond
((< prev (car data)) (loop (cdr data) (car data) 'cadence (+ cad 1) dec))
((> prev (car data)) (loop (cdr data) (car data) 'decadence cad (+ dec 1)))
(else (loop (cdr data) (car data) 'unknown cad dec))))
((eqv? state 'cadence)
(cond
((< prev (car data)) (loop (cdr data) (car data) state cad dec))
((> prev (car data)) (loop (cdr data) (car data) 'decadence cad (+ 1 dec)))
(else (loop (cdr data) (car data) 'unknown cad dec))))
(else ; 'decadence
(cond
((< prev (car data)) (loop (cdr data) (car data) 'cadence (+ 1 cad) dec))
((> prev (car data)) (loop (cdr data) (car data) state cad dec))
(else (loop (cdr data) (car data) 'unknown cad dec))))
)
)
)
(newline)
а в чем заключается вопрос?
"кто мне написать на шару лабу? ")
"кто мне написать на шару лабу? ")
Похожие вопросы
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- Дан массив размера N. Вывести все двузначные элементы массива и их номера. ПОМОГИТЕ pascal ХЕЛП
- Дан прямоугольный целочисленный массив размером N*N. Определить является ли данный массив магическим квадратом, т.е. сум
- Помогите :) Дан массив из n целых чисел. Найти количество встречающихся равных чисел.
- Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максима
- Дано вещественное число R и массив размера N. Найти элемент массива, который наименее близок к данному числу
- . Дан массив из N чисел. Поменять местами элементы, равноудаленные от произвольно задаваемого К-го элемента.
- Помогите решить на ПАСКАЛЕ!Увеличить четные числа массива размера N,на исходное значение первого четного числа.
- Дана матрица размером n x m. Найти наибольший положительный и наименьший отрицательный элементы матрицы.
- Дан линейный массив чисел N. N вводит пользователь. Вывести все простые числа массива.