Дано множество A из N точек (N > 2), точки заданы своими координатами x, y). Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам множества A, и сами эти точки (точки выводятся в том же порядке, в котором они перечислены при задании множества A).
на с++
Ответы
#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;
}
При запуске кода вам нужно ввести сначала количество точек, затем координаты этих точек, по одной на строку.
![](https://st.uroker.com/files/800/800eb3270a8017645a38adbca51c9f73.png)