Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 3

Найти первую самую длинную подпоследовательность, которая является пилообразной

19.01.2018, 22:08. Показов 1376. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Есть интересная, но сложная задачка:

Есть последовательность чисел. Найти первую самую длинную подпоследовательность, которая является пилкой.

«Пилка» - это последовательность целых чисел, числа, которой чередуется по возрастанию и убыванию.*
например 2 5 3 7 4 6 5 9

Вектора использовать нельзя.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2018, 22:08
Ответы с готовыми решениями:

Найти самую длинную подпоследовательность, которая является арифметической или геометрической прогрессией
В заданной последовательности целых чисел (без 0) найти самую длинную подпоследовательность, которая является арифметической или...

Найти самую длинную подпоследовательность массива из простых чисел
Найти самую длинную подпоследовательность массива A, состоящую из элементов, которые являются простыми числами

В одномерном массиве найти самую длинную цепочку подряд стоящих элементов, которая является «палиндромом»
в одномерном массиве найти самую длинную цепочку подряд стоящих элементов, которая является «палиндромом». В такой цепочке первое число...

8
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.01.2018, 23:15
Lina Logvina, если вы поясните, что вы понимаете под "последовательностью", можно было бы и подумать...

Добавлено через 1 минуту
Не обязательно строгое определение. На пальцах, на примерах...
1
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 3
19.01.2018, 23:26  [ТС]
Например, у нас есть последовательность 2 4 3 7 8 45 34 67
по условию задачи ответом будет 2 4 3 7.
Если исходная последовательность такая
2 8 12 3 23 23 45 6 34 67
то ответ: 2 8 3 23 6 34

Добавлено через 5 минут
Последовательностью могуть быть даже числа не расположенны рядом. Но важно, чтобы при её поиске мы "читали" массив слева направо.

2 3 33 33 33 56 78 6 3 2 67 45 32 31 37 5 - выделинные елементы - искомая последовательность
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.01.2018, 23:31
Lina Logvina, понятно. То есть элементы подпоследовательности не обязаны стоять рядом. Задача и правда интересная. Хотя ее можно решить и полным перебором, но это неэффективно и скушно. Но, сейчас, увы! голова клонится
Если что-то хорошее приснится - обязательно поделюсь.
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
20.01.2018, 00:52
Lina Logvina, какие ограничения на количество чисел?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.01.2018, 10:44
Lina Logvina, Вот такое приснилось. начальный элемент всегда A[0]. Потом перебираем все элементы, пока не случится нарушение монотонности. Условие такого нарушения A[i-1]*A[i+1] < 0. Элемент, где это случилось объявляем очередным "зубом" - "междузубьем" пилы
C++
1
2
3
4
cout << A[0];
for(int i=1; i<n-1; i++)
  if ( A[i-1]*A[i+1] < 0) cout << A[i];
cout << A[n-1];
На ваш пример алгоритм отреагирует так
2 3 33 33 33 56 78 6 3 2 67 45 32 31 37 5

Добавлено через 6 минут
Те выдаст не 5, а 7 чисел.
Тут, правда, есть один маленький подвох. Нужна специальная обработка "долин" типа 33 33 33 33. Вообще-то лучше всего (для алгорима) сжимать "долины" в одну точку, но можно слегка модифицировать и обойтись без этого.

Добавлено через 5 минут
Как это доказать со всей строгостью, мне не сказали. Но есть вот такое соображение. Любое другое множество элементов, не идущее по вершинам и ямам (по экстремумам) можно попытаться улучшить смещением одного элемента и возникновением другого. А вот множество, получающееся в этом алгоритме, улучшить таким образом никак нельзя.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.01.2018, 00:59
Цитата Сообщение от Байт Посмотреть сообщение
Тут, правда, есть один маленький подвох.
Имхо, не один. Их столько в интервале каждой пилы, сколько неподходящих вариантов этом интервале. То есть для
Цитата Сообщение от Lina Logvina Посмотреть сообщение
Например, у нас есть последовательность 2 4 3 7 8 45 34 67
пилой будет не только
Цитата Сообщение от Lina Logvina Посмотреть сообщение
2 4 3 7.
2 4 3 8
это пила у которой 4 элемента и эта пила полностью соответствует условию.
2 4 3 45
и остальные (хвостовые) тоже.
Во втором примере монотонные участки по длине тоже не превышают 2 поэтому нельзя показать как весело это может быть быть, когда их больше. А главное, интересно их взаимодействие с другими пилками.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.01.2018, 11:56
IGPIGP, я же не говорю, что построенное мной решение - единственно. Их может быть целая куча, если соответствующим образом подобрать числа в интервалах. Но количество зубьев вряд ли превзойдет построенного мной.
Кстати, вот исходный пример 2 4 3 7 8 45 34 67 и одна из пил 2 4 3 8, которая дальше не продолжается. Но стоит конечную восьмерку заменить на 45 (по предложенному алгоритму), как тут же появляется 2 4 3 45 34 67
Образно говоря, беря точки нарушения монотонности мы увеличиваем шансы продолжить пилостроение.

Добавлено через 4 минуты
Хорошо, что вернулся к теме - нашел ошибку в коде (пост 6). Конечно, надо так
C++
1
2
3
4
cout << A[0];
for(int i=1; i<n-1; i++)
  if ( (A[i]-A[i-1])*(A[i+1]-A[i]) < 0) cout << A[i];
cout << A[n-1];
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
23.01.2018, 20:57
Цитата Сообщение от Байт Посмотреть сообщение
IGPIGP, я же не говорю, что построенное мной решение - единственно.
Байт, Ваша идея хороша. Я заметил лишь по поводу неточности условия. То есть, в примерах по одному решению. А их больше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2018, 20:57
Помогаю со студенческими работами здесь

Найти самую длинную неубывающую подпоследовательность данной последовательности (с использованием списков)
Дана последовательность вещественных чисел a1,a2,...,an. Указать самую длинную неубывающую подпоследовательность данной последовательности.

Найти самую длинную неубывающую подпоследовательность данной последовательности (с использованием списков)
Дана последовательность вещественных чисел a1,a2,...,an. Указать самую длинную неубывающую подпоследовательность данной...

Найти самую длинную неубывающую подпоследовательность данной последовательности с использованием списков
Дана последовательность вещественных чисел a1,a2,...,an. Указать самую длинную неубывающую подпоследовательность данной последовательности

Найти максимально длинную подпоследовательность чисел по условию
В заданной последовательности целых чисел найти с помощью процедуры максимально длинную подпоследовательность чисел такую, что каждый...

Написать функцию, которая находит самую длинную ветку в дереве
Здравствуйте! Помогите пожалуйста написать функцию которая находит самую длинную ветку в дереве (но ветка не от корня а от любого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru