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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Такие названия тем запрещены !!!
Старый 06.11.2007, 20:13   #1
kisha
 
Регистрация: 05.11.2007
Сообщений: 5
Лампочка Решение задачи на Си

Точки в прямоугольнике.
Даны N точек на плоскости. Найти наименьший прямоугольник, содержащий все эти точки внутри себя (или на границе).
очень интересная задачка но я не представляю как ее можно решить и написать на си я новичок...помогите пожалуйста
kisha вне форума Ответить с цитированием
Старый 06.11.2007, 20:25   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Код:

#include <iostream.h>

int main()
{

int N;

double min_x,max_x,min_y,max_y,x,y;

cin>>N;

for (int i=0;i<N;i++)
{
    cin>>x>>y;
    if (!i)
    {
        min_x=max_x=x;
        min_y=max_y=y;
    }
    else
    {
        if (x>max_x)
            max_x=x;
        else
            if (x<min_x)
                min_x=x;
        if (y>max_y)
            max_y=y;
        else
            if (y<min_y)
                min_y=y;
    }
}

cout<<"("<<min_x<<";"<<min_y<<")\n"
      <<"("<<max_x<<";"<<max_y<<")\n";

cin.get();

return 0;

}
Carbon вне форума Ответить с цитированием
Старый 18.11.2007, 15:33   #3
kisha
 
Регистрация: 05.11.2007
Сообщений: 5
По умолчанию

Carbon..я думаю что ни так просто она решаеться а если как нидь по углом расмотреть прямоугольник и он окажеться наименьшим? че тогда? как эт записать?
kisha вне форума Ответить с цитированием
Старый 18.11.2007, 15:34   #4
kisha
 
Регистрация: 05.11.2007
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
Код:

#include <iostream.h>

int main()
{

int N;

double min_x,max_x,min_y,max_y,x,y;

cin>>N;

for (int i=0;i<N;i++)
{
    cin>>x>>y;
    if (!i)
    {
        min_x=max_x=x;
        min_y=max_y=y;
    }
    else
    {
        if (x>max_x)
            max_x=x;
        else
            if (x<min_x)
                min_x=x;
        if (y>max_y)
            max_y=y;
        else
            if (y<min_y)
                min_y=y;
    }
}

cout<<"("<<min_x<<";"<<min_y<<")\n"
      <<"("<<max_x<<";"<<max_y<<")\n";

cin.get();

return 0;

}
Carbon..я думаю что ни так просто она решаеться а если как нидь по углом расмотреть прямоугольник и он окажеться наименьшим? че тогда? как эт записать?
kisha вне форума Ответить с цитированием
Старый 18.11.2007, 18:01   #5
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

в лоб:

4 вложенных цикла
для каждых 4х точек проверяешь, находятся ли все остальные внутри. если находятся, то сравниваешь его площадь с минимальной из найденных (для начала бери максимум, допустим ((unsigned float)-1))...
если новая меньше, то запоминаешь эти 4 точки...

тьфу, неправильно прочел условие.
тогда и правда нетривиальная...
Alek86 вне форума Ответить с цитированием
Старый 18.11.2007, 18:34   #6
Куок
 
Регистрация: 18.11.2007
Сообщений: 2
По умолчанию

Элементарно!!! Находишь максимальное расстояние между любой парой всех возможных точек. полученный отрезок - основа. рассчитываешь координаты середины отрезка - точка С. С - принимаешь за центр окружности с радиусом максимального расстояния от С до любой точки множества кроме концов отрезка(точка А). кроме того через центр отрезка проводишь перпендикуляр такой же длины как полученный отрезок. Откладываешь проекцию с А на перпендикуляр, разность икса между центром отрезка и т.к.А умноженная на 2 и есть меньшая сторона прямоугольника.
Куок вне форума Ответить с цитированием
Старый 18.11.2007, 19:43   #7
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

жесть
kisha, если буш проверять, хоть скажи, правильно это или нет?
Alek86 вне форума Ответить с цитированием
Старый 19.11.2007, 08:00   #8
PuzzleC
Пользователь
 
Регистрация: 01.11.2007
Сообщений: 33
По умолчанию

http://forum.vingrad.ru/index.php?sh...dpost&p=312889
Посмотри может поможет
PuzzleC вне форума Ответить с цитированием
Старый 19.11.2007, 23:28   #9
kisha
 
Регистрация: 05.11.2007
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Куок Посмотреть сообщение
Элементарно!!! Находишь максимальное расстояние между любой парой всех возможных точек. полученный отрезок - основа. рассчитываешь координаты середины отрезка - точка С. С - принимаешь за центр окружности с радиусом максимального расстояния от С до любой точки множества кроме концов отрезка(точка А). кроме того через центр отрезка проводишь перпендикуляр такой же длины как полученный отрезок. Откладываешь проекцию с А на перпендикуляр, разность икса между центром отрезка и т.к.А умноженная на 2 и есть меньшая сторона прямоугольника.
жуть..вот этим всем ты меня напугал как эт все написать то? я не знаю чувствую себя профаном.. помоги если не сложно
kisha вне форума Ответить с цитированием
Старый 19.11.2007, 23:31   #10
kisha
 
Регистрация: 05.11.2007
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Alek86 Посмотреть сообщение
в лоб:

4 вложенных цикла
для каждых 4х точек проверяешь, находятся ли все остальные внутри. если находятся, то сравниваешь его площадь с минимальной из найденных (для начала бери максимум, допустим ((unsigned float)-1))...
если новая меньше, то запоминаешь эти 4 точки...

тьфу, неправильно прочел условие.
тогда и правда нетривиальная...
попробую конечно..только получиться ли у меня что нидь из этого?! ты сам не проверял?
kisha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на решение Pascal abc Tecka Фриланс 9 18.12.2012 22:20
Решение задачи на c++ JOFRIF Помощь студентам 2 21.04.2008 00:35
Решение задачи на Pascal Progs Помощь студентам 2 22.10.2007 13:22
решение задачи TuNeR Microsoft Office Excel 2 15.10.2007 09:31