Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C++ — количество локальных максимумов в последовательности
- #include <iostream>
- int main() {
- int LMCounter = 0, a1, a2, a3;
- std::cin >> a1 >> a2 >> a3;
- if (a1 != 0 && a2 != 0 && a3 != 0) {
- do {
- if (a1 < a2 && a2 > a3) { // обнаружен локальный максимум
- ++LMCounter;
- a1 = a3;
- std::cin >> a2;
- if (0 == a2) {
- break;
- }
- }
- else {
- a1 = a2;
- a2 = a3;
- }
- std::cin >> a3;
- }
- while (0 != a3);
- std::cout << LMCounter;
- }
- /*
- Поскольку первый и последний элементы последовательности ЛМ не являются, наименьшая длина последовательности равна 3 числа плюс терминатор. Только в таком случае можно предполагать, что второй элемент является ЛМ относительно первого и третьего.
- Ещё до ввода четвертого и каждого
- из последующих элементов следует сохранить два предшествующих элемента в отдельных переменных. Таким образом в каждый момент времени в памяти будет храниться триада элементов.
- При выявлении очередной триады с локальным максимумом в центре можно третий элемент присвоить первому, а во второй и третий ввести последующие два элемента последовательности (то есть продвинуть триаду сразу на два места в последовательности).
- Если в триаде центральный элемент не является ЛМ, то продвинуть триаду на одно место.
- Изначально СчетчикЛМ = 0;
- Допустим, триада состоит из переменных A1, A2, A3. Все три получили значения. Условие проверки на ЛМ: (A1 < A2 && A2 > A3).
- Если условие истинно (A2 — ЛМ), то { СчетчикЛМ++; A1 = A3; cin >> A2 >> A3; }, иначе { A1 = A2; A2 = A3; cin >> A3; }
- */
Add Comment
Please, Sign In to add comment