C/C++

Помогите написать код

4. Количество равнобедренных треугольников. На плоскости дано n точек. Написать программу, которая вычислит и напечатает количество равнобедренных треугольников, которые можно составить из заданных точек. В первой строке задаётся количество точек n, в последующих n строках задаются пары целых чисел – координаты точек. Точки хранятся в динамических массивах.
Исходные данные:
5
0 0
0 2
2 2
4 1
4 0
Результат:
2
Urmat Kalkamanov
Urmat Kalkamanov
759
Начну, пожалуй, с того, что таких треугольников у вас три!!

{ 0,0; 0,2; 2,2 }
{ 0,2; 2,2; 4,1 }
{ 0,0; 2,2; 4,0 }

Продолжу тем, что за использование динамических массивов, я ваш дом труба шатал! ООП и std::vector, позволит без выстрелов в ногу решить вашу задачу!

#include <iostream>
#include <vector>
using namespace std;
struct Point {
double x;
double y;
Point() : x(0), y(0) {}
Point(double x, double y) : x(x), y(y) {}
double length(const Point& p)const {
return sqrt(pow(p.x - x, 2) + pow(p.y - y, 2));
}
};
struct Line {
Point a;
Point b;
Line() = default;
Line(Point a, Point b) : a(a), b(b) {}
double length()const {
return a.length(b);
}
friend bool operator==(const Line& a, const Line& b) {
return fabs(a.length() - b.length()) < 1e-12;
}
};
class Triangle {
public:
Triangle() = default;
Triangle(Line&& a, Line&& b, Line&& c) : a(move(a)), b(move(b)), c(move(c)) {}
double perimeter()const {
return a.length() + b.length() + c.length();
}
bool exist()const {
return arg() > 0;
}
bool is_isosceles()const {
return a == b || b == c || a == c;
}
private:
Line a, b, c;
double arg()const {
auto p = perimeter() / 2;
return p * (p - a.length()) * (p - b.length()) * (p - c.length());
}
};
int main() {
size_t n;
cin >> n;
vector<Point> points(n);
for (auto& point : points) cin >> point.x >> point.y;
vector<Triangle> triangles;
for (auto a = 0U; a < n - 2U; ++a) {
for (auto b = a + 1U; b < n - 1U; ++b) {
for (auto c = b + 1U; c < n; ++c) {
triangles.emplace_back(
Line(points[a], points[b]),
Line(points[b], points[c]),
Line(points[a], points[c])
);
}
}
}
auto count = 0U;
for (const auto& triangle : triangles) {
if (triangle.exist() && triangle.is_isosceles()) {
++count;
}
}
cout << count << '\n';
system("pause > nul");
}
Николай Олегович
Николай Олегович
51 001
Лучший ответ
Urmat Kalkamanov Спасибо, конечно, за код, но нужно сделать именно с динамическим массивом