Найти самую большую подстроку в строке - C (СИ)

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

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

помогите найти ошибку...плиз.. Напишите программу, которая считывает длину строки, а потом последовательность чисел.И ищет самую большую подстроку в строке. Например: 1, 2, 3, 4, 5 - самая длинная последовательность(СДП)= 5 5, 4, 3, 2, 1 - СДП = 1 4, 5, 1, 2, 3 - СДП = 3 4, 3, 2, 1, 2 - СДП = 2 3, 4, 5, 1, 2 - СДП = 3 4 - СДП = 1 (пустая строка) - СДП = 0
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
 
    int n,i;
    int j;
 
    printf("напиши длину строки n");
    scanf("%d",&n);
    int a[n];
 
    for(i=0;i<n;++i){
 
        scanf("%d",&(a[i]));
        if (n>=2)
    {
 
        while (a[i]>a[i-1])
           j++;
    printf("%d\n",j);

    }
 
    else if(n==0)
    printf("0");
    else if(n==1)
    printf("1");
    }
 
    return 0;
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        int n,i;
        int j=0;
        int max = 0;
        printf("podaj dlugosc ciagu n:  ");
        scanf("%d",&n);
        int * a = (int *)malloc(sizeof(int) * n);
 
        for(i=0;i<n;i++)
        {
                scanf("%d",&a[i]);
        }
        if (n>=2){
                j = 1;
                for(i=1;i<n;i++)
                        if (a[i-1]<a[i])
                            j++;
                         else
                        {
                            if(j>max)
                              max = j;
                            j = 1;
                        }
                if(j>max)
                    max = j ;
        }
        else if(n==1)
                max = 1;
        free(a);
        printf("Najdluzszy ciag: %d\n", max);
        getchar();
 
        return 0;
}

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

В этом коде выполняется следующая последовательность действий:

  1. Задается длина строки (n) с помощью функции scanf.
  2. Выделяется память под массив a с помощью функции malloc.
  3. С помощью цикла for и функции scanf в массив a последовательно заносятся значения, которые считываются с помощью функции scanf.
  4. Если длина строки больше или равна 2, то ищется самая длинная подстрока. Для этого используется два вложенных цикла for. Первый цикл определяет, является ли текущий элемент (a[i-1]) меньше следующего (a[i]). Если это так, то переменная j увеличивается на 1. Если элементы равны, то проверяется, является ли текущая длина (j) больше максимальной (max). Если да, то max обновляется значением j. После этого j сбрасывается обратно на 1. Второй цикл завершается, когда встречается элемент, меньший предыдущего, или когда достигается конец строки.
  5. Если длина строки равна 1, то max присваивается значение 1.
  6. Выделяемая память освобождается с помощью функции free.
  7. С помощью функции printf выводится наибольшая подстрока.
  8. С помощью функции getchar считывается символ конца строки.
  9. Функция main возвращает 0, что означает успешное завершение работы программы.

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

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