• Предмет: Информатика
  • Автор: mrvana102
  • Вопрос задан 5 месяцев назад

Дано множество A из N точек (N > 2), точки заданы своими координатами x, y). Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам множества A, и сами эти точки (точки выводятся в том же порядке, в котором они перечислены при задании множества A).
на с++

Ответы

Ответ дал: leprekon882
2

#include <iostream>

#include <cmath>

#include <vector>

struct Point

{

double x, y;

};

double distance(Point p1, Point p2)

{

return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));

}

int main()

{

// Читаем количество точек

int n;

std::cin >> n;

// Читаем точки

std::vector<Point> points;

for (int i = 0; i < n; i++)

{

   double x, y;

   std::cin >> x >> y;

   points.push_back({x, y});

}

// Находим треугольник с наибольшим периметром

Point p1, p2, p3;

double maxPerimeter = 0;

for (int i = 0; i < n; i++)

{

   for (int j = i + 1; j < n; j++)

   {

       for (int k = j + 1; k < n; k++)

       {

           double perimeter = distance(points[i], points[j]) + distance(points[j], points[k]) + distance(points[k], points[i]);

           if (perimeter > maxPerimeter)

           {

               maxPerimeter = perimeter;

               p1 = points[i];

               p2 = points[j];

               p3 = points[k];

           }

       }

   }

}

// Выводим результат

std::cout << "Point 1: (" << p1.x << ", " << p1.y << ")" << std::endl;

std::cout << "Point 2: (" << p2.x << ", " << p2.y << ")" << std::endl;

std::cout << "Point 3: (" << p3.x << ", " << p3.y << ")" << std::endl;

std::cout << "Perimeter: " << maxPerimeter << std::endl;

return 0;

}

При запуске кода вам нужно ввести сначала количество точек, затем координаты этих точек, по одной на строку.

Приложения:

mrvana102: а можете сделать это в виде функции с указателями итд (если не сложно)
leprekon882: Добавил .cpp ФАЙЛ
leprekon882: Посмотрите
Вас заинтересует