Определить длину наибольшего возрастающего участка последовательности - 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;
}
Объяснение кода листинга программы
В этом коде:
- Сначала мы инициализируем переменную count, которая представляет собой количество элементов в массиве. Мы используем функцию scanf для считывания этого значения с помощью клавиатуры.
- Затем мы выделяем память под массив array с помощью функции malloc.
- Мы заполняем массив случайными целыми числами от 0 до 99 с помощью функции rand.
- Мы начинаем с цикла, который проходит через каждый элемент массива, начиная со второго, чтобы проверить, является ли текущий элемент больше следующего. Если это так, мы увеличиваем длину текущего участка на 1.
- Если текущий элемент больше следующего, мы обновляем длину текущего участка до 1 и сбрасываем его начало до индекса текущего элемента + 1.
- Если длина текущего участка больше максимальной длины, мы обновляем максимальную длину и сбрасываем начало текущего участка до индекса начала максимального участка.
- После завершения цикла мы выводим на экран начало и длину наибольшего участка.
- Затем мы выводим на экран элементы массива, начиная с индекса начала наибольшего участка и заканчивая индексом начала наибольшего участка + длина наибольшего участка - 1.
- Наконец, мы освобождаем память, выделенную под массив, с помощью функции free, и приостанавливаем выполнение программы с помощью функции system.