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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 23:54   #1
Евгений_Коротков
 
Регистрация: 02.04.2015
Сообщений: 3
Вопрос Найти самый большой квадрат - просто алгоритм/Pascal/Java

Даны 2 массива, содержащие координаты точек (x,y соответственно, массивы одномерные). Нужно найти самый большой квадрат из этих координат.

Мое решение состоит в том, что я ищу треугольник (прямоугольный), а потом перебираю все другие точки, чтобы найти квадрат, НО

Код:
function pryam(x1,y1,x2,y2,x3,y3:integer):boolean;
begin
if (abs(dlina(x1,y1,x2,y2)-dlina(x3,y3,x2,y2))<0.1) and (abs(abs((y2-y1)*(y2-y3))+abs((x2-x1)*(x2-x3)))<0.1)

       then pryam:=true
       else pryam:=false;
end;
Во-первых, штука с скалярным произведением почему-то не работает, я думаю из-за того, что при таком условии важен порядок.

Во-вторых, куча времени, чтобы перебрать все точки.

Код:
for i:=1 to n do
       for j:=1 to n do
           for e:=1 to n do
                      begin
                           if (pryam(x[i],y[i],x[j],y[j],x[e],y[e])=true) and (i<>e) and (i<>j) and (e<>j) then
                           begin
                                k:=k+1;
Что делать вообще не знаю, если кто-то знает как решить эту задачу (понимает алгоритм), то можете написать словами, благо алгоритм я воспроизвести смогу.

Желательно Pascal, немножко хуже, но тоже хорошо - Java.
Евгений_Коротков вне форума Ответить с цитированием
Старый 03.04.2015, 00:44   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Имхо:
Сортируем точки по координате Х и по координате У по возрастанию (при одинаковом Х координата У возрастает).
Перебираем по порядку две точки из этого списка.
Поворачиваем получившийся отрезок на 90 градусов относительно центра.
Ищем бинарным поиском координату Х (левосторонним и правосторонним бинпоиском находим диапазон индексов, в котором нужно искать У), при одинаковом Х по У.
Если нашли обе точки повернутого отрезка, то посчитали площадь и запомнили координаты, если площадь получилась больше предыдущей запомненной.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.04.2015 в 00:50.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм сжатия Хаффмана (найти ошибки), Pascal WestCoast Фриланс 0 16.01.2014 20:28
[Pascal] Найти самый короткий палиндром. JonDee Помощь студентам 0 10.05.2012 17:24
Как копировать самый большой файл с папки которою я укажу misher Помощь студентам 5 09.12.2010 21:54
Какой самый просто способ защитить программу? TwiX Софт 12 27.02.2010 14:53
Помогите решить уравнение. pascal си неважно или просто алгоритм Mixasik Помощь студентам 5 10.11.2008 18:52