Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 21:51   #1
Alekzinder
Пользователь
 
Регистрация: 05.05.2012
Сообщений: 24
По умолчанию Матрица

Помогите пожалуйста
1)Заданы вещественные числа a[1],b[1], a[2],b[2], ..., a[n],b[n]. Пары чисел (a[i],b[i]) - это левые и правые концы окрашенных отрезков на одной прямой (a[i]=<b[i]). Некоторые из этих отрезков частично или полностью перекрывают друг друга. Найти наиболее длинный окрашенный отрезок прямой.
Alekzinder вне форума Ответить с цитированием
Старый 28.03.2013, 07:49   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Может уже сам начнешь что-то делать? С той энергией, с которой ты сюда задачи постишь, уже можно десяток программ написать.

Алгоритм простой:
1. Заводишь два одинаковых (то есть одноразмерных и однотипных) массива a и b
2. Делаешь цикл от 1 до n (размерность массива) и ищешь, при каком i разность b[i]-a[i] наибольшая.
3. Выводишь элементы a[i] и b[i] на экран.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.03.2013, 08:32   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sciv, всё далеко не так просто.
отрезки могут накладываться друг на друга!
например, даны отрезки 10-14, 1-4, 3-6
ответ: наиболее длинный отрезок длиной 6 (от 1 до 6 )

наверняка, можно придумать много алгоритмов решения.
Я тут на форуме решал (полностью) аналогичную задачу с пересекающимися прямоугольниками, лежащими на одной прямой.

нужно отсортировать отрезки по левым сторонам и дальше уже перебирать отрезки, считать суммарную длину полученной окрашенной линии (хранить LeftColored и RightColored - границы окрашенного участка) до тех пор, пока левая граница следующего отрезка пересекается с получаемым отрезком.
Если нет пересечений - начинаем обрабатывать новый окрашенный участок.
При всех этих действиях ищем максимальное значение окрашенного участка (т.е. взяли очередной отрезок - проверили, пересекает ли он окрашенный участок, полученный на предыдущей итерации цикла, если да, нашли новую общую длину окрашенного участка, если она больше MaxColorLineLength - присвоили переменной новое значение.

Всё просто.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2013, 08:41   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Sciv, всё далеко не так просто.
Как сказать... в задании ведь четко указано:

Цитата:
Пары чисел (a[i],b[i]) - это левые и правые концы окрашенных отрезков
Цитата:
Найти наиболее длинный окрашенный отрезок прямой.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.03.2013, 10:01   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sciv
я же привёл пример...
ладно.
попытаюсь ещё раз.
пусть n=3
массив A = (10, 1 ,3); {координаты левых границ отрезков}
массив B = (14, 4, 6); {координаты правых границ отрезков}

Цитата:
Некоторые из этих отрезков частично или полностью перекрывают друг друга. Найти наиболее длинный окрашенный отрезок прямой.
Как Вы думаете, для чего в условии дана подчёркнутая мною фраза?
наиболее длинный окрашенный отрезок прямой (прямая - это координатная линия, на которой находятся все наши заданные отрезки (с пересечениями и объединённиями)) будет от точки 1 до точки 6.

p.s. если вы возьмете линию. на ней цветным карандашом (или маркером) нарисуете заданные отрезки, и посмотрите, как прямая будет раскрашена, думаю, у вас не возникнет вопрос, что такое "наиболее длинный окрашенный отрезок прямой"
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.03.2013, 10:49   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

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

А условие могло быть дано затем, чтобы указать, что числа в массивах могут быть неупорядоченными.


P.S. А почему не от 1 до 14?

P.P.S. Не надо объяснять, уже сам понял.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль. Матрица NxN -> текстовый файл -> Матрица NxN - найти max по диагоналям -> типизированный файл Лунатик13 Помощь студентам 1 20.02.2012 15:54
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Матрица в Си iggor Помощь студентам 6 07.12.2009 01:24
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11