Minmax30. Дано целое число $$N$$ и набор из $$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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# include <iostream> # include <windows.h> # include <cmath> # include <iomanip> # include <fstream> using namespace std; int main () { SetConsoleCP(1251); SetConsoleOutputCP(1251); ifstream in ("Minmax30.txt"); int max; cout << "Дан набор целых чисел: "; in >> max; cout << max << " "; int answer = 0; int a; int n = 1; // промежуточное количество подряд идущих максимальных элементов while (in >> a ) { cout << a << " " ; if (a == max) { // Если текущий элемент равен максимальному, то увеличиваем n ++n; answer = min(answer, n); } if (a > max) { // Если текущий элемент оказался больше максимального, то answer = 0; // Считаем, что интересующая нас длина пока неизвестна n = 1; // Длина текущей последовательности = 1 max = a; // Обновляем максимальный элемент } // Если же текущий элемент меньше максимального (a<max) // И перед ним закончилась последовательность из макс.элементов (n>0) // И ранее не было последовательностей из этого числа (answer == 0) if (max > a && n > 0 && answer == 0) { answer = n; // Интересующая длина - минимальная из найденной только что и найденной ранее n = 0; // Сбрасываем счетчик длины последовательности } else if (max > a && n > 0 && answer > 0) { answer = min(answer, n); n = 0; } } // Обработка случаев, когда максимальный(-ые) элементы - последние в последовательности if (a == max && answer > 0) { // Если раньше были эти элементы, то выбираем меньшую answer = min(n, answer); } if (a == max && answer == 0) { // Если этих элементов еще не было в последовательности, то интересующая длина = только что найденной answer = n; } in.close (); cout << endl << "Минимальное количество подряд идущих максимальных элементов: "<< answer << endl; system ("pause"); return 0; } |
Файл Minmax30.txt
1 |
1 1 1 1 1 2 1 1 2 2 |
Другие задачи из раздела Minmax можно посмотреть здесь.
Комментарии:
Комментарии 1