[Мы решаем ваши проблемы с Си и Паскалем ]
Главная » Статьи » Задачи из заказов » Заказ 07.03.08

Из заданного множества точек на плоскости выбрать такие три точки, чтобы они образовывали треугольник, внутри которого находилось бы...
// 1.3  Из  заданного  множества  точек  на плоскости  выбрать  такие  три
// точки,  чтобы  они  образовывали  треугольник,  внутри  которого  находилось
// бы  максимальное  количество  точек  множества.
#include <stdio.h>
#include <conio.h>
void main()
{
  clrscr();
  const eps = 1e-3;
  const nmax = 100;
  int n, r1 = 0, r2 = 0, r3 = 0;
  float x[nmax], y[nmax];
  int maxcount = 0;
  printf("Vvedite kolvo tochek: ");
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
  {
    printf("x[%d] = ", i);
    scanf("%f", &x[i]);
    printf("y[%d] = ", i);
    scanf("%f", &y[i]);
  }
  for (int t1 = 0; t1 < n; t1++)
    for (int t2 = 0; t2 < n; t2++)
      for (int t3 = 0; t3 < n; t3++)
      {
    int count = 0;
    for (int t = 0; t < n; t++)
    {
      if ((t != t1) && (t != t2) && (t != t3) && (t1 != t2) && (t2 != t3))
      {
        float v = (x[t]-x[t1])*(y[t2]-y[t1])-(y[t]-y[t1])*(x[t2]-x[t1]);
        if ((((x[t]-x[t2])*(y[t3]-y[t2])-(y[t]-y[t2])*(x[t3]-x[t2]))*v>-eps) &&
        (((x[t]-x[t3])*(y[t1]-y[t3])-(y[t]-y[t3])*(x[t1]-x[t3]))*v>-eps))
          count++;
      }
    }
    if (count > maxcount) {
      maxcount = count;
      r1 = t1;
      r2 = t2;
      r3 = t3;
    }
      }
  printf("Treugolnik s vershinami %d, %d, %d. kolvo tochek vnutri %d", r1, r2, r3, maxcount);
  getch();
}

Категория: Заказ 07.03.08 | Добавил: solver (07.03.2008)
Просмотров: 2184