Array39. Дан массив размера $$N$$. Найти количество его промежутков монотонности (то есть участков, на которых его элементы возрастают или убывают).
Решение от Дмитрия:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# include <iostream> # include <windows.h> # include <cmath> # include <iomanip> # include <fstream> # include "arraydouble.h" using namespace std; int main () { SetConsoleCP(1251); SetConsoleOutputCP(1251); int NMAX = 100; cout << "Дан массив: "; double a[NMAX]; // данный массив из не более чем 10 чисел int n = inputArray (a, NMAX, "Array39.txt"); showArray (a, n); int answer = 0; bool inc = 0;//Показатель участка возрастания bool dec = 0;//Показатель участка убывания for (int i=1; i<n; ++i) { if (a[i] > a[i-1] && !inc) { ++answer; inc = 1; } else if (a[i] <= a[i-1]) inc = 0; if (a[i] < a[i-1] && !dec) { ++answer; dec = 1; } else if (a[i] >= a[i-1]) dec = 0; } cout << "Количество промежутков монотоннности: " << answer << endl; system ("pause"); return 0; } |
arraydouble.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# include <iostream> # include <fstream> using namespace std; int inputArray (double a[], int nmax, const char* name) { ifstream in (name); int n = 0; // Количество элементов while (n < nmax && in >> a[n]) {++n;} in.close(); return n; } void showArray (const double a[], int n) { for (int i = 0; i < n; ++i) { cout << a[i] << " "; } cout << endl; } |
Array39.txt
1 |
1 2 3 4 4 0 -1 6 |
Другие задачи из раздела Array можно посмотреть здесь.
Решение не правильное.
При вводе массива [1,2,1,2,1,2,1,2,1] Выводит количество промежутков 8!