Помощь - Поиск - Пользователи - Календарь
Полная версия: "Пила" > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
DARKOVER
Здравствуйте, помогите пожалуйста составить алгоритм нахождения максимальной длины пилообразной последовательности X[p+1] < X[p+2] >X[p+3] < ... >X[p+k]. Пробовал сделать через второй массив нулей и единиц... Т.е. на месте вершины зуба ставить 1, а на месте основания зуба 0. И считать максимальную длину последовательности, но что то не то!!! Так как в 1 последовательности может быть несколько пилообразных... Подскажите пожалуйста как можно это реализовать... Заранее благодарен.
creer
Я бы сделал примерно так.
Пишем функцию, которая по 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
Большое спасибо...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2025 Invision Power Services, Inc.