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

Количество локальных максимумов (на языке C++)

Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элементов последовательности. Первый и последний элемент последовательности не могут быть локальными максимумами.

Дана непустая последовательность целых чисел, оканчивающаяся нулём. Необходимо найти количество локальных максимумов в этой последовательности. Ноль числом последовательности не считается.

Формат входных данных

Вводится не более чем 2^15 целых чисел, каждое из которых не превосходит по модулю 2^15−1. После последнего числа вводится 0.
Формат выходных данных

Требуется вывести количество локальных максимумов в последовательности.
Примеры

входные данные
1
2
1
2
1
0
выходные данные
2
#include <iostream>
#include <vector>
using namespace std;
class Sequence {
public:
explicit Sequence(const short terminator = 0) :
terminator_(terminator),
local_max_(0),
count_(0),
buffer_(3)
{ }
bool add(const short value) {
if (box_.size() < buffer_) {
if (value == terminator_) return false;
box_.push_back(value);
} else {
if (box_.at(0) < box_.at(1) && box_.at(1) > box_.at(2)) ++local_max_;
if (value == terminator_) return false;
box_.at(0) = box_.at(1);
box_.at(1) = box_.at(2);
box_.at(2) = value;
}
return ++count_ != limit_;
}
auto local_max()const {
return local_max_;
}
private:

short terminator_;
short local_max_;
short count_;
size_t buffer_;
vector<short> box_;
const short limit_ = numeric_limits<short>::max();
};
int main() {
Sequence seq;
short value;
do cin >> value; while (seq.add(value));
const auto local_max = seq.local_max();
cout << '\n' << local_max << '\n';
system("pause");
}
Ширик ******
Ширик ******
54 462
Лучший ответ
Руслан Саидов А как можно написать код для этой задачи, использовав только цикл и IF-ELSE?
#include < iostream >
#include < string >
#include < sstream >
#include < vector >
#include < algorithm >

using namespace std;

void main()
{
setlocale(LC_ALL, "rus");
cout << "Введите последовательность чисел, между коими пробелы ";
string str;
getline(cin, str);
stringstream ss(str);
vector < int > v;
for (; ss;)
{
int t;
ss >> t;
v.push_back(t);
}
v.pop_back();
unsigned sum = 0;
for (unsigned u = 1; u < v.size() - 1; ++u)
{
if (v[u - 1] < v[u] && v[u + 1] < v[u])
++sum;
}
cout << "Количество локальных максимумов в предложенной последовательности " << sum << endl;
cin.get(); cin.get();
}
Sergey Stalker
Sergey Stalker
8 552