Определить длину наибольшего возрастающего участка последовательности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Определить длину наибольшего возрастающего участка последовательности. Вывести на экран кол-во элементов и сами элементы. Очень нужно.

Решение задачи: «Определить длину наибольшего возрастающего участка последовательности»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
   srand(time(NULL));
 
   size_t count = 0;
   while (count == 0)
   {
      printf("count: ");
      scanf("%u", &count);
   }
 
   int* array = (int*) malloc(sizeof(int) * count);
 
   size_t i;
   for (i = 0; i < count; ++i)
   {
      array[i] = rand() % 100;
      printf("%d ", array[i]);
   }
   printf("\n");
 
   unsigned maxBegin = 0;
   unsigned maxLength = 1;
 
   unsigned curBegin = 0;
   unsigned curLength = 1;
 
   for (i = 0; i < count-1; ++i)
   {
      if (array[i] < array[i+1])
      {
         curLength++;
      }
      else
      {
         if (curLength > maxLength)
         {
            maxBegin = curBegin;
            maxLength = curLength;
         }
         curBegin = i+1;
         curLength = 1;
      }
   }
 
   printf("begin in pos = %d\nlength sequence = %d\n", maxBegin+1, maxLength);
 
   for (i = 0; i < maxLength; ++i)
   {
      printf("%d ", array[i + maxBegin]);
   }
   printf("\n");
 
   free(array);
 
   system("pause");
 
   return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Сначала мы инициализируем переменную count, которая представляет собой количество элементов в массиве. Мы используем функцию scanf для считывания этого значения с помощью клавиатуры.
  2. Затем мы выделяем память под массив array с помощью функции malloc.
  3. Мы заполняем массив случайными целыми числами от 0 до 99 с помощью функции rand.
  4. Мы начинаем с цикла, который проходит через каждый элемент массива, начиная со второго, чтобы проверить, является ли текущий элемент больше следующего. Если это так, мы увеличиваем длину текущего участка на 1.
  5. Если текущий элемент больше следующего, мы обновляем длину текущего участка до 1 и сбрасываем его начало до индекса текущего элемента + 1.
  6. Если длина текущего участка больше максимальной длины, мы обновляем максимальную длину и сбрасываем начало текущего участка до индекса начала максимального участка.
  7. После завершения цикла мы выводим на экран начало и длину наибольшего участка.
  8. Затем мы выводим на экран элементы массива, начиная с индекса начала наибольшего участка и заканчивая индексом начала наибольшего участка + длина наибольшего участка - 1.
  9. Наконец, мы освобождаем память, выделенную под массив, с помощью функции free, и приостанавливаем выполнение программы с помощью функции system.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы