UVA 10522 Height to Area(已知三角形三高求面积)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=17&page=show_problem&problem=1463
题意:
给你一个三角形的三条高的长度,要你求出该三角形的面积. 可能存在非法输入.
分析:
设三角形ABC的三边长为a,b,c,对应的三条高长为x,y,z.且该三角形面积为S. 那么有下面等式:
S=1/2*a*x = 1/2*b*y = 1/2*c*z
可得
a=2*S/x
b=2*S/y
c=2*S/z
令p=(a+b+c)/2=S(1/x+1/y+1/z),那么由海伦公式有S=
根号( p*(p-a)*(p-b)*(p-c)
)
将a,b,c的值带入海伦公式中令
val=(1/x+1/y+1/z)*(-1/x+1/y+1/z)*(1/x-1/y+1/z)*(1/x+1/y-1/z)可得:
S=1/根号(val)
那么什么时候的输入是非法的呢?
当(x==0或y==0或z==0)或val<=0时,输入非法.
AC代码:
#include<cstdio>
#include<cmath>
using namespace std;
const double eps=1e-10;
int dcmp(double x)
{
if(fabs(x)<eps) return 0;
return x<0?-1:1;
}
int main()
{
int n; scanf("%d",&n);
while(n)
{
double x,y,z;
scanf("%lf%lf%lf",&x,&y,&z);
if(dcmp(x)==0 || dcmp(y)==0 || dcmp(z)==0)
{
printf("These are invalid inputs!\n");
--n;
continue;
}
double val=(1/x+1/y+1/z)*(-1/x+1/y+1/z)*(1/x-1/y+1/z)*(1/x+1/y-1/z);
if(dcmp(val)<=0)
{
printf("These are invalid inputs!\n");
--n;
continue;
}
else printf("%.3lf\n",1/sqrt(val));
}
return 0;
}
分享到:
相关推荐
UVA1131 最优三角形剖分 最优三角剖分的一类题目都是差不多的。给你一个多边形,让你把它分割成若干个三角形,求三角形某最优解,比如UVA1331要求面积最大的三角形的面积最小。
uva272
UVA109的题解,经测试完全正确,还附有题解。
有uva刘汝佳文件夹的50道题解,从数据结构开始,以后慢慢上传
包含UVA在线OJ系统的绝大部分的示例代码,并都已AC,可在刷题时参考
UVa在我看来是比较全的一个题解,希望能帮助大家。欢迎下载。
uva最全ac代码
uva531最长公共子序列问题水题,应用简单的dp即可ac有更快速的方法欢迎讨论
uva10755 ac 代码,可以随意更改下载
uva357的栈实现版本
UVA 题目,不是很难,试试吧
《算法竞赛入门经典》UVa配套题目pdf版完整
1.Uva_base的编译 在编译球队时,则需要在当前球队文件夹下打开终端输入执行以下命令(以下命令都是在root下执行的): ./configure make clean make 如果运行Uva_base后,出现球员越界或掉线的情况,就重新...
世界著名大学UVA OJ平台上的题目部分分类,分的不好请原谅。
这是一支完整的uva球队,包含所有基本模块,初者可在上修改得到自己的球队
uva_trilearn2002 源代码
主要是uvaoj习题相关题目 练习题目
这里面全部为在Uva Online Judge上面的部分题目的解答,里面提供了解答使用的源代码。
开源项目-codingsince1985-UVa.zip,Been solving UVa Online Judge Problems in Golang for one year (and counting)
PDF试题