-Peer-

Количество локальных максимумов в последовательности целых чисел оканчивающейся нулём

Mar 5th, 2021 (edited)
547
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. // C++ — количество локальных максимумов в последовательности
  2.  
  3. #include <iostream>
  4.  
  5. int main() {
  6. int LMCounter = 0, a1, a2, a3;
  7. std::cin >> a1 >> a2 >> a3;
  8. if (a1 != 0 && a2 != 0 && a3 != 0) {
  9. do {
  10. if (a1 < a2 && a2 > a3) { // обнаружен локальный максимум
  11.     ++LMCounter;
  12.     a1 = a3;
  13.     std::cin >> a2;
  14.     if (0 == a2) {
  15.         break;
  16.     }
  17. }
  18. else {
  19.     a1 = a2;
  20.     a2 = a3;
  21. }
  22.  std::cin >> a3;
  23. }
  24. while (0 != a3);
  25. std::cout << LMCounter;
  26. }
  27.  
  28. /*
  29. Поскольку первый и последний элементы последовательности ЛМ не являются, наименьшая длина последовательности равна 3 числа плюс терминатор. Только в таком случае можно предполагать, что второй элемент является ЛМ относительно первого и третьего.
  30.  
  31. Ещё до ввода четвертого и каждого
  32. из последующих элементов следует сохранить два предшествующих элемента в отдельных переменных. Таким образом в каждый момент времени в памяти будет храниться триада элементов.
  33.  
  34. При выявлении очередной триады с локальным максимумом в центре можно третий элемент присвоить первому, а во второй и третий ввести последующие два элемента последовательности (то есть продвинуть триаду сразу на два места в последовательности).
  35.  
  36. Если в триаде центральный элемент не является ЛМ, то продвинуть триаду на одно место.
  37.  
  38. Изначально СчетчикЛМ = 0;
  39.  
  40. Допустим, триада состоит из переменных A1, A2, A3. Все три получили значения. Условие проверки на ЛМ: (A1 < A2 && A2 > A3).
  41. Если условие истинно (A2 — ЛМ), то { СчетчикЛМ++; A1 = A3; cin >> A2 >> A3; }, иначе { A1 = A2; A2 = A3; cin >> A3; }
  42. */
Add Comment
Please, Sign In to add comment