Другие языки программирования и технологии

Дан массив размера N.Определить количество его промежутков монотонности.

Slava Palagin
Slava Palagin
137
А в чем собственно проблема? Дан массив, можно с помощью цикла по порядку перебрать все его элементы. В теле цикла простое условие на определение взаимоотношения между соседними элементами (между i-ым и i-1, например) . Если элемент i-1 уже является элементом монотонности, то i-ый рассматривается как ее продолжение, если он в нее вписывается, если не вписывается, что фиксируется конец монотонности на i-1, и i-ый переходит в категорию "новая монотонность". При каждом случае окончания монотонности увеличивать счетчик на +1.

Важно помнить:
1. при таких условиях, что описал я, цикл начинается со 2-ого элемента, т. к. 0-ой и 1-ый автоматически образуют одну из монотонности (нужно только с самого начала выяснить ее показатель) ;
2. нужно иметь показатель монотонности: 0 - убывающая, 1 - возрастающая. Это нужно для проверки условия;
3. необходимо в самом начале счетчик приравнять к нуль.

И в итоге счетчик - это и есть ответ на поставленную задачу.
Неизвестно Неизвестно
Неизвестно Неизвестно
1 741
Лучший ответ
На 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)
а в чем заключается вопрос?

"кто мне написать на шару лабу? ")

Похожие вопросы