运用海伦公式可以推出三角形面积的公式为
1/sqrt((1/ha+1/hb+1/hc)*(1/ha+1/hb-1/hc)*(1/ha+1/hc-1/hb)*(1/hb+1/hc-1/ha))。
1/sqrt((1/ha+1/hb+1/hc)*(1/ha+1/hb-1/hc)*(1/ha+1/hc-1/hb)*(1/hb+1/hc-1/ha))。
在判断是否能构成三角形的时候需要注意边为0和负的时候的情况。
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const double eps=1e-10;
int n;
double a,b,c;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
else return x<0?-1:1;
}
int judge()
{
if(dcmp(a)<=0||dcmp(b)<=0||dcmp(c)<=0) return 0;
if(dcmp(1/a+1/b-1/c)<=0) return 0;
if(dcmp(1/a+1/c-1/b)<=0) return 0;
if(dcmp(1/b+1/c-1/a)<=0) return 0;
return 1;
}
int main()
{
freopen("in.txt","r",stdin);
cin>>n;
while(n)
{
cin>>a>>b>>c;
if(judge())
{
double ans=1/sqrt((1/a+1/b+1/c)*(1/a+1/b-1/c)*(1/a-1/b+1/c)*(1/b+1/c-1/a));
printf("%.3f\n",ans);
}
else
{
n--;
cout<<"These are invalid inputs!"<<endl;
}
}
return 0;
}