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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2012, 16:31   #11
FleXt
Пользователь
 
Регистрация: 01.12.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Для нечётного числа точек всё хуже: вполне может быть единственная тройка точек, лежащая на одной прямой, разделяющей все остальные точки на две равномощные группы. В этом случае ничего умнее полного перебора мне в голову не приходит.
ну так в чем я не прав, ведь для нечетного числа наименьшая разность количеств и будет либо 1 либо 0, я и делаю такие проверки
FleXt вне форума Ответить с цитированием
Старый 04.12.2012, 16:42   #12
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
ну так в чем я не прав, ведь для нечетного числа наименьшая разность количеств и будет либо 1 либо 0, я и делаю такие проверки
Логически - в том, что при получении разности 1 надо не заканчивать, а продолжать, потому что можно потом получить 0.
На уровне реализации...
Код:
(min!=0||min!=1)
Значение этого выражения равно true при любом значении min.
Abstraction вне форума Ответить с цитированием
Старый 04.12.2012, 17:04   #13
FleXt
Пользователь
 
Регистрация: 01.12.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Логически - в том, что при получении разности 1 надо не заканчивать, а продолжать, потому что можно потом получить 0.
На уровне реализации...
Код:
(min!=0||min!=1)
Значение этого выражения равно true при любом значении min.
Теперь ясно, спасибо. Тогда другой вопрос, если я оставлю только условие
Цитата:
(min!=0
как мне для нечетного количества получить ответ, если у меня все же разность равна 1?
FleXt вне форума Ответить с цитированием
Старый 04.12.2012, 17:21   #14
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
как мне для нечетного количества получить ответ, если у меня все же разность равна 1?
А я не вижу, где Вы вообще получаете ответ. Минимум величины на множестве полным перебором ищется всегда одинаково:
Код:
Взять первый элемент, посчитать его величину, занести в "кандидата" элемент, в "оценку" посчитанную величину.
Для каждого последующего элемента:
  Посчитать его величину, сравнить с "оценкой". Если меньше, то:
    Занести в "кандидата" элемент, в "оценку" его величину.
"Кандидат" есть элемент с наименьшей величиной.
Abstraction вне форума Ответить с цитированием
Старый 04.12.2012, 17:28   #15
FleXt
Пользователь
 
Регистрация: 01.12.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
А я не вижу, где Вы вообще получаете ответ. Минимум величины на множестве полным перебором ищется всегда одинаково:
Код:
Взять первый элемент, посчитать его величину, занести в "кандидата" элемент, в "оценку" посчитанную величину.
Для каждого последующего элемента:
  Посчитать его величину, сравнить с "оценкой". Если меньше, то:
    Занести в "кандидата" элемент, в "оценку" его величину.
"Кандидат" есть элемент с наименьшей величиной.
Код:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 15


int main()
{   int i,j=0,k,n;
    int v, left, right, min=15,minA=0;
    int x[N],y[N];
    int imn=0, jmn=0;
    scanf("%d", &n);
     for( i=0;i<n;i++)
        scanf("%d%d",&x[i],&y[i]);
     for(i=0;i<n;i++)
        {

         for(j=i+1;j<n;j++)
         {
             left=0;
             right=0;
            for(k=i+1;k<n;k++)
               {

                v=(x[j]-x[i])*(y[k]-y[i])-(y[j]-y[i])*(x[k]-x[i]);
                if(v>0) left++;
                else if(v<0) right++;
               }
            minA=abs(left-right);
            if(minA<min)
             {

                min=minA;
                imn=i;
                jmn=j;
             }
         }

        }
       printf("%d %d  %d %d  %d",x[imn],y[imn],x[jmn],y[jmn],min) ;
}
сделал вот так
FleXt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
геометрия novichokkk Помощь студентам 10 18.04.2012 18:36
Геометрия Pascal.t Паскаль, Turbo Pascal, PascalABC.NET 2 17.12.2010 00:13
Геометрия в Си rik_nel Общие вопросы C/C++ 5 14.12.2010 13:43
Геометрия zumm Свободное общение 3 07.07.2010 18:37
Си геометрия Денни Помощь студентам 11 05.03.2010 09:41