![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
DARKOVER |
![]()
Сообщение
#1
|
Школьник ![]() Группа: Продвинутые Сообщений: 11 Регистрация: 21.4.2007 Город: Ижевск Учебное заведение: ИжГТУ ![]() |
Здравствуйте, помогите пожалуйста составить алгоритм нахождения максимальной длины пилообразной последовательности X[p+1] < X[p+2] >X[p+3] < ... >X[p+k]. Пробовал сделать через второй массив нулей и единиц... Т.е. на месте вершины зуба ставить 1, а на месте основания зуба 0. И считать максимальную длину последовательности, но что то не то!!! Так как в 1 последовательности может быть несколько пилообразных... Подскажите пожалуйста как можно это реализовать... Заранее благодарен.
|
![]() ![]() |
creer |
![]()
Сообщение
#2
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Я бы сделал примерно так.
Пишем функцию, которая по 3 значениям определяет есть зуб, или нет. Т. е. функция зуб(X1, X2, X3) Если ((X1<X2)и(X2>X3))или((X1>X2)и(X2<X3)) то это зуб иначе не зуб. В основной программе пишем цикл от первого значения до последнего - 2 элемента. В нем проверяем, если сейчас зуб, то увеличиваем счетчик на 1, если не зуб или конец последовательности, то сравниваем значение счетчика с предыдущим максимальным значением, если новое больше, то сохраняем новое значение. Небольшой пример ниже. Код int mv = 0; //Максимальное значение int cv = 0; //Текущее значение for (int i=0; i<100; i++) { if (istooth(a[i], a[i+1], a[i+2]) { cv++; } else { if (cv>mv) mv = cv; cv = 0; } } if (cv>mv) mv = cv; В mv будем максимальная длина. |
DARKOVER |
![]()
Сообщение
#3
|
Школьник ![]() Группа: Продвинутые Сообщений: 11 Регистрация: 21.4.2007 Город: Ижевск Учебное заведение: ИжГТУ ![]() |
Большое спасибо...
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 22:25 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru