75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
1 | |
На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков15.11.2013, 10:42. Показов 14021. Ответов 17
Метки нет (Все метки)
Помогите пожалуйста понять, что от меня хотят и какой(как) разработать алгоритм для решения этой задачи.
На прямой своими концами заданы N отрезков. Найти точку принадлежащую максимальному числу отрезков. Ну, понятное дело, что есть прямая. На этой прямой есть n отрезков, допустим длинна отрезков одинаковая. Как именно лучше всего показать в программе эти отрезки? Одномерный массив целых чисел? допустим mas[50]; [i] = 0 - значит нет отрезка(пустота) [i] = 1 - значит отрезок начался [i] = 2 - конец отрезка. Как лучше отобразить этот момент? И что значит вот эта фраза: своими концами заданы ? Следующий отрезок будет расположен сразу за предыдущим без пропусков? Или как?... не очень понимаю. И в итоге, имея отрезки нужно : найти точку принадлежащую максимальному числу отрезков. Как это понять? Допустим, на основе предыдущей мысли, предполагаю: есть 2 отрезка, которые идут друг за другом, потом пропуск, потом 3 отрезка друг за другом. Вот максимальное число отрезков. 3 отрезка друг за другом.... точек будет дохера в этом участке из трех отрезков. Выбрать любую? Помогите плиз разобраться
0
|
15.11.2013, 10:42 | |
Ответы с готовыми решениями:
17
Найти точку принадлежащую прямой Найти длины отрезков концами которых являются координаты заданных точек Найти ГМТ середин всевозможных отрезков с концами на двух данных отрезках Ввести количество отрезков и их длины; найти, сколько треугольников можно составить из этих отрезков |
148 / 114 / 21
Регистрация: 15.01.2013
Сообщений: 266
|
|
15.11.2013, 10:56 | 2 |
"Заданы своими концами", как я понял, это значит что Вам передается 2 точки. Одна точка - один конец отрезка, вторая - второй. Исходя из этого - отрезки могут накладываться друг на друга. Например [-1,1] и [0,1], тогда точка 0 принадлежит 2м отрезкам сразу. Вот с Вас и спрашивают найти точку, принадлежащую макс. кол-ву отрезков.
1
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 10:57 [ТС] | 3 |
Ах да....... спасибо огромное) Я не подумал про это почему-то.
0
|
148 / 114 / 21
Регистрация: 15.01.2013
Сообщений: 266
|
|
15.11.2013, 11:09 | 4 |
А из алгоритмов реализации мне в голову только перебор приходит. В задании подразумеваются только целые точки, как я понял, тогда можно пробежаться по всем целым точкам от левой точки самого левого отрезка до правой точки самого правого, и в каждой из этих точек пробегать по массиву всех отрезков, где сравнивать a<x<b, где x - точка, [a,b] - отрезок. Если да, то накапливать счетчик для текущей точки.
Что-то более красивое, чем простой перебор мне в голову не приходит.
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 11:10 | 5 |
1) координаты отрезков - целые числа или вещественные?
2) каков диапазон значений координат?
0
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 11:15 [ТС] | 6 |
Я наверное сделаю целые. А диапазон любой, чтобы не сильно большой был
Добавлено через 1 минуту Я вообще хочу для каждого отрезка свой объект... вот так как-то попробовать. А он уже будет хранить начало и конец. И наверное как-то там счетчик будет. Пока не придумал.
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 11:37 | 7 |
если координаты концов отрезков целые неотрицательные числа, то можно завели массив, в котором будут храниться счетчики отрезков, проходящих через каждую точку. считываем поочереди координаты концов отрезков и увеличиваем все счетчики от начала отрезка до конца отрезка. в конце останется только найти максимальное значение в массиве. его индекс и будет искомой точкой.
1
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
||||||
15.11.2013, 15:33 [ТС] | 8 | |||||
Вот как получилось: может немного не так работает, но вроде бы правильно
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 17:36 | 9 |
kpoxaa, а что выведет ваша программа для набора отрезков: [1, 2], [1, 4], [3, 5], [6, 7], [6, 8], [6, 9] ?
0
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 19:20 [ТС] | 10 |
Сейчас посмотрим... лучше помогите доделать, если не верно.
Добавлено через 5 минут Должно показать первую найденную точку, которая хранит в себе максимум отрезков. Добавлено через 5 минут [6, 7], [6, 8], [6, 9] программа должна была найти точку 6. Но почему-то не нашла... Добавлено через 57 минут [1, 2], [1, 4], [3, 5], программа считает что 3 здесь общая для всех трех отрезков. Хотя это не так, нужно организовать еще проверку, которая будет при добавлении данных, проверять все предыдущие добавленные объекты и сверяться с новым... сейчас попробую сделать.
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 19:53 | 11 |
kpoxaa, не до конца понимаю ваш алгоритм, но вроде как вы считаете, что если с некоторым отрезком пересекается наибольшее кол-во отрезков, то в этом отрезке и надо искать нужную точку. так? если так, то вот вам пример: [1, 8], [1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [9, 11], [9, 12]. как видно с отрезком [1, 8] пересекается наибольшее кол-во отрезков (4 шт), но каждая точка на этом отрезке принадлежит только 1 или 2 отрезкам. с отрезком [9, 12] пересекается всего 2 других отрезка, но точка 9 принадлежит 3 отрезкам. следовательно ваша идея неверна и дополнительные проверки не помогут.
1
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 20:05 [ТС] | 12 |
тогда я запутался... можете помочь реализовать верный способ?
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 20:11 | 13 |
kpoxaa, я же вам предлагал алгоритм на предыдущей странице.
1
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 20:13 [ТС] | 14 |
он казался запутанным)) хорошо, я попробую
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
15.11.2013, 20:33 | 15 |
это наверное я плохо умею объяснять, а алгоритм то очень простой.
попытка №2: пусть прямая представляет собой набор точек с целочисленными неотрицательными координатами. тогда можно представить эту прямую в виде массива, в котором каждая ячейка будет связана с точкой прямой. в этих ячейках будем хранить количество прямых, проходящих через соответствующие точки. тогда индекс максимального значения в массиве будет указывать на искомую точку, т.к. через эту точку проходит максимальное кол-во прямых.
1
|
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
|
|
15.11.2013, 21:12 [ТС] | 16 |
Да, я понял)) А давайте придумаем, что делать если вводят отрицательные значения для отрезка?
0
|
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
|
|
16.11.2013, 08:34 | 17 |
сместить все отрезки вправо по координатной оси так, чтобы все значения стали >= 0, а также запомнить величину этого смещения, чтобы потом при выводе ответа восстановить действительное значение искомой точки.
0
|
2 / 2 / 3
Регистрация: 24.02.2013
Сообщений: 106
|
||||||||||||||||
16.11.2013, 10:39 | 18 | |||||||||||||||
я сделал так:
a.h
1
|
16.11.2013, 10:39 | |
16.11.2013, 10:39 | |
Помогаю со студенческими работами здесь
18
Вывести наименьшее расстояние между концами отрезков Найти точку пересечения двух отрезков Найти точку пересечения отрезков в трехмерном пространстве Считая, что заданы координаты концов отрезков, найти их длины Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |