给出三角形三边上的三条高ha,hb,hc,求三角形的面积
这个题一开始我就陷入错误的思路之中——把AB看成是圆的直径,则直角三角形的三个点都在圆上,还看出了相似,然后推了一阵,发现解决不了,然后参考了网上大神的题解,豁然开朗,设三边为a,b,c,共有以下方程:
0.5*a*ha=s; 0.5*b*hb=s; 0.5*c*hc=s; l=0.5*(a+b+c); s=sqrt(l*(l-a)*(l-b)*(l-c));
然后能直接解出s关于ha,hb,hc的表达式
注:不合法的情况仅限于表达式约束
以下是代码:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double ha,hb,hc;
scanf("%d",&n);
while(n)
{
scanf("%lf%lf%lf",&ha,&hb,&hc);
double x=1.0/ha;
double y=1.0/hb;
double z=1.0/hc;
double A=x+y+z;
double B=-x+y+z;
double C=x-y+z;
double D=x+y-z;
double t=A*B*C*D;
if(t<=0||ha==0||hb==0||hc==0)
{
printf("These are invalid inputs!\n");
n--;
}
else
{
printf("%.3lf\n",1.0/sqrt(t));
}
}
return 0;
}