题目描述
输入n个边长,找出其中可以组成三角形的“优美指数”的最大值。优美指数是指|a-b|+|a-c|+|b-c|。
解题思路
找出最大边,最小便作为第二条边,找出能组成三角形的第三条边,即为最大值边。
代码
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool IsTriangle(int a, int b, int c)
{
if (a + b <= c || a + c <= b || b + c < a)
return false;
return true;
}
int main()
{
int n;
vector<int> bi;
cin >> n;
if (n < 3)
{
cout << "0" << endl;
return 0;
}
while (n--)
{
int temp;
cin >> temp;
bi.push_back(temp);
}
int res = 0;
//cout << "test" << endl;
sort(bi.begin(), bi.end());
int min = bi[0];
int max = 0;
int i = bi.size() - 1;
//cout << "test" << endl;
while(i > 1)
{
max = bi[i];
int thi = bi[i - 1];
if (IsTriangle(min, thi, max))
{
res = (max - min) * 2;
break;
}
else
{
i--;
}
}
max = bi[bi.size() - 1];
min = 0;
while (i < bi.size() - 2)
{
min = bi[i];
int thi = bi[i + 1];
if (IsTriangle(min, thi, max))
{
res = (max - min) * 2 > res ? (max-min)*2:res;
break;
}
else
{
i++;
}
}
cout << res << endl;
return 0;
}