Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //дано множетсво точек, определенных своими координатами. определить треугольник наибольшего периметра, который можно создать из этих точек
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<pair<double,double>> coord;
- double sideLenght(int i, int j)
- {
- return sqrt((coord[i].first - coord[j].first) * (coord[i].first - coord[j].first) + (coord[i].second - coord[j].second) * (coord[i].second - coord[j].second));
- }
- double perimetr(int i, int j, int k)
- {
- return sideLenght(i, j) + sideLenght(j, k) + sideLenght(k, i);
- }
- bool triangle(int i, int j, int k)
- {
- if ((sideLenght(i, j) + sideLenght(j, k) > sideLenght(k, i)) && (sideLenght(j, k) + sideLenght(k, i) > sideLenght(i, j)) && (sideLenght(k, i) + sideLenght(i, j) > sideLenght(j, k)))
- return false;
- return true;
- }
- int main()
- {
- double a, b;
- cout << "End the input by typing any letter\n";
- while(cin >> a)
- {
- cin >> b;
- coord.push_back(make_pair(a, b));
- }
- int finish = coord.size();
- double maximum = -1;
- for(int i = 0; i < finish - 2; i++)
- {
- for(int j = i + 1; j < finish - 1; j++)
- {
- for(int k = j + 1; k < finish; k++)
- {
- if (perimetr(i, j, k) > maximum && triangle(i, j, k))
- maximum = perimetr(i, j, k);
- }
- }
- }
- cout << maximum << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement