Найти самую большую подстроку в строке - 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; }
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Задается длина строки (n) с помощью функции scanf.
- Выделяется память под массив a с помощью функции malloc.
- С помощью цикла for и функции scanf в массив a последовательно заносятся значения, которые считываются с помощью функции scanf.
- Если длина строки больше или равна 2, то ищется самая длинная подстрока. Для этого используется два вложенных цикла for. Первый цикл определяет, является ли текущий элемент (a[i-1]) меньше следующего (a[i]). Если это так, то переменная j увеличивается на 1. Если элементы равны, то проверяется, является ли текущая длина (j) больше максимальной (max). Если да, то max обновляется значением j. После этого j сбрасывается обратно на 1. Второй цикл завершается, когда встречается элемент, меньший предыдущего, или когда достигается конец строки.
- Если длина строки равна 1, то max присваивается значение 1.
- Выделяемая память освобождается с помощью функции free.
- С помощью функции printf выводится наибольшая подстрока.
- С помощью функции getchar считывается символ конца строки.
- Функция main возвращает 0, что означает успешное завершение работы программы.