UVA 10522 Height to Area(三角形已知高求面积)

这个题有公式。  用公式提交AC之后 才知道 是根据海伦公式推出来的。


设三边为 abc  三高为 mnp 则S = am/2 = bn/2 = cp/2 


则 a = 2s/m     b = 2s/n    c = 2s/p


海伦公式  S = sqrt(p*(p-a)*(p-b)*(p-c));     p = (a+b+c)/2   带进去就求出来了


(1) 三角形存在的条件:
         中大高的倒数和>小高的倒数

(2)面积公式:
1/S =√[(1/m+1/n+1/p)(- 1/m+1/n+1/p )( 1/m-1/n+1/p )( 1/m+1/n-1/p )]


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
int main (){
    int kase;
    scanf("%d",&kase);
    while(kase){
        double mm,nn,pp;
        double m,n,p;
        scanf("%lf%lf%lf",&mm,&nn,&pp);
        p = max(mm,nn);
        p = max(p, pp);
        m = min(mm,nn);
        m = min(m, pp);
        n = (mm + nn + pp) - m - p; // m n p  是递增的
        if(1/n + 1/ p <= 1/m){
            printf("These are invalid inputs!\n");
            kase--;
        }
        else{
            double s = sqrt((1/m+1/n+1/p)*(-1/m+1/n+1/p)*(1/m-1/n+1/p)*(1/m+1/n-1/p));
            s = 1/s;
            printf("%.3lf\n",s);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值