Array32. Дан массив размера $$N$$. Найти номер его первого локального минимума (локальный минимум — это элемент, который меньше любого из своих соседей).
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
program Array32; var a:array[1..10] of integer; N,i:Integer; begin Write('N: '); Readln(N); for i:=1 to N do begin write(i,' :'); readln(a[i]); end; i:=2; if a[1]<a[2] then writeln('1') else begin while (i<=N-1) and (not((a[i-1]>a[i]) and (a[i]<a[i+1]))) do inc(i); Writeln(i); end; end. |
Другие задачи из раздела Array можно посмотреть здесь.
Необходимо рассмотреть и случай когда минимумом является первый или последний элементы
Поправил. Переписал на while, а то не понятно как проверять последний элемент.
Было:
Стало:
Первый локальный минимум — первый элемент, который меньше следующего, поэтому лишь одно условие в сравнении. Минимум по умолчанию равен N на случай если массив монотонно убывающий и сравнение не сработает.
[/crayon]
Идея хорошая, но не подходит под условия задачи:
массив: 5 4 3 3 3 4 5
этот алгоритм покажет, что локальный минимум есть, а на самом деле его нет:
«локальный минимум — это элемент, который меньше любого из своих соседей»
К сожалению, да. Тут и в некоторых задачах дальше проигнорил возможность повторов чисел. Переделав — получил обычное решение только с for. Тоже и с Array33.
Программа в шапке работает не правильно, в случае с массивом, например (2,2,2) выведет 3 — номер последнего. Если while надо проверять i