InnaSibirova

Gen Sher 2 исправ

Dec 18th, 2021 (edited)
855
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. /*В этом алгоритме реализован через подсчёт кол-ва разнознаковых элементов. После того, как мы заполнили массив, начаинем подсчёт. Очередная подпоследовательность
  2. заканчиватеся, проверяем, явелется ли попоследовательность максимальной, и если да, то запоминаем её. В конце
  3. выводим максимальную подпоследовательность*/
  4. /*
  5. Исправление:
  6. в 10 строке инициализирована переменная maxj (до этого выводило неверный ответ на наборе одинаковых по знаку чисел)
  7. */
  8. #include <stdio.h>   // подключаем библиотеку
  9. int main() {
  10.     int n, count = 1, maxcount = 1, j, maxj = 0;  // задаём переменные: n -- размер массива, count - счётчик разных по знаку чисел, maxcount - максимальное кол-во идущих подряд разнознаковых элементов
  11.     int arr[1000]; // задаём массив
  12.     printf("enter the size ");    // просим пользователя ввести размер массива
  13.     scanf("%d", &n);                            // считываем значение n
  14.     for(int i = 0; i < n; i += 1) {             // c помощью цикла заполняем массив числами
  15.         scanf("%d", &arr[i]);
  16.     }
  17.     for(int i = 0; i < n-1; i += 1) {      // создаём цикл и првоерям разные ли знаки у чисел
  18.         if(count == 1) { // запоминаем номер, с которого начинатеся подпоследовательнсоть
  19.             j = i;
  20.         }
  21.         if((arr[i] > 0 && arr[i+1] < 0) || (arr[i] < 0 && arr[i+1] > 0)) { // если числа разные по знаку, то увеличиваем счётчик на 1
  22.             count += 1;
  23.             if(count > maxcount) { // проверяем, максимальную ли подполседовательность посчитал счётчик, если да, то это подпоследовательнсоть становится максимальной
  24.                 maxcount = count;
  25.                 maxj = j;
  26.             }
  27.         }
  28.         else {
  29.            
  30.             count = 1;              // иначе делаем счётчик снова равным 1
  31.         }
  32.     }
  33.     for(int i = maxj; i < maxj + maxcount; i++) {                // выводим максимальную подпоследовательность
  34.         printf("%d ", arr[i]);
  35.     }
  36.    
  37. }
Add Comment
Please, Sign In to add comment