Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*В этом алгоритме реализован через подсчёт кол-ва разнознаковых элементов. После того, как мы заполнили массив, начаинем подсчёт. Очередная подпоследовательность
- заканчиватеся, проверяем, явелется ли попоследовательность максимальной, и если да, то запоминаем её. В конце
- выводим максимальную подпоследовательность*/
- /*
- Исправление:
- в 10 строке инициализирована переменная maxj (до этого выводило неверный ответ на наборе одинаковых по знаку чисел)
- */
- #include <stdio.h> // подключаем библиотеку
- int main() {
- int n, count = 1, maxcount = 1, j, maxj = 0; // задаём переменные: n -- размер массива, count - счётчик разных по знаку чисел, maxcount - максимальное кол-во идущих подряд разнознаковых элементов
- int arr[1000]; // задаём массив
- printf("enter the size "); // просим пользователя ввести размер массива
- scanf("%d", &n); // считываем значение n
- for(int i = 0; i < n; i += 1) { // c помощью цикла заполняем массив числами
- scanf("%d", &arr[i]);
- }
- for(int i = 0; i < n-1; i += 1) { // создаём цикл и првоерям разные ли знаки у чисел
- if(count == 1) { // запоминаем номер, с которого начинатеся подпоследовательнсоть
- j = i;
- }
- if((arr[i] > 0 && arr[i+1] < 0) || (arr[i] < 0 && arr[i+1] > 0)) { // если числа разные по знаку, то увеличиваем счётчик на 1
- count += 1;
- if(count > maxcount) { // проверяем, максимальную ли подполседовательность посчитал счётчик, если да, то это подпоследовательнсоть становится максимальной
- maxcount = count;
- maxj = j;
- }
- }
- else {
- count = 1; // иначе делаем счётчик снова равным 1
- }
- }
- for(int i = maxj; i < maxj + maxcount; i++) { // выводим максимальную подпоследовательность
- printf("%d ", arr[i]);
- }
- }
Add Comment
Please, Sign In to add comment