UVA10347 Medians题目描述Link: https://uva.onlinejudge.org/index.php?optioncom_onlinejudgeItemid8category15pageshow_problemproblem1288PDF输入格式输出格式输入输出样例 #1输入 #13 3 3 3 3 3输出 #15.196 5.196Solution大致题意已知一个三角形的三条中线长度求这个三角形的面积。如果这样的三角形不存在输出− 1 -1−1。输入有若干组数据。分析三角形的中线有现成的长度公式式中的A , B , C A,B,CA,B,C表示长度为a , b , c a,b,ca,b,c的边的中线长度A 1 2 2 b 2 2 c 2 − a 2 A\dfrac{1}{2}\sqrt{2b^22c^2-a^2}A21​2b22c2−a2​B 1 2 2 a 2 2 c 2 − b 2 B\dfrac{1}{2}\sqrt{2a^22c^2-b^2}B21​2a22c2−b2​C 1 2 2 b 2 2 a 2 − c 2 C\dfrac{1}{2}\sqrt{2b^22a^2-c^2}C21​2b22a2−c2​可化为{ 2 b 2 2 c 2 − a 2 4 A 2 2 a 2 2 c 2 − b 2 4 B 2 2 b 2 2 a 2 − c 2 4 C 2 \begin{cases}2b^22c^2-a^24A^2\\2a^22c^2-b^24B^2\\2b^22a^2-c^24C^2\end{cases}⎩⎨⎧​2b22c2−a24A22a22c2−b24B22b22a2−c24C2​解得{ a 2 3 2 B 2 2 C 2 − A 2 b 2 3 2 A 2 2 C 2 − B 2 c 2 3 2 B 2 2 A 2 − C 2 \begin{cases} a\frac{2}{3}\sqrt{2B^22C^2-A^2}\\ b\frac{2}{3}\sqrt{2A^22C^2-B^2}\\ c\frac{2}{3}\sqrt{2B^22A^2-C^2}\\ \end{cases}⎩⎨⎧​a32​2B22C2−A2​b32​2A22C2−B2​c32​2B22A2−C2​​上述表达式中的A , B , C A,B,CA,B,C是输入文件每一行的三个数由此即可直接转化为一个关于a 2 , b 2 , c 2 a^2,b^2,c^2a2,b2,c2的三元一次方程通过该方程组求解出a , b , c a,b,ca,b,c的值使用海伦公式S p ( p − a ) ( p − b ) ( p − c ) , p 1 2 ( a b c ) S\sqrt{p(p-a)(p-b)(p-c)},p\dfrac{1}{2}(abc)Sp(p−a)(p−b)(p−c)​,p21​(abc)即可求解。如果求出的a 2 , b 2 , c 2 a^2,b^2,c^2a2,b2,c2某一个小于等于0 00即为无解输出− 1 -1−1。同样三角形的基本性质包括三条中线能构成三角形。如果中线长度不满足两边之和大于第三边也需要输出− 1 -1−1。需要说明的是多组数据每组数据输出时必须要带换行符− 1 -1−1应保留三位小数输出为-1.000。代码#includecstdio #includecmath #includecstdlib double A,B,C,a,b,c,p; void kernel(void) { if(scanf(%lf%lf%lf,A,B,C)EOF) exit(0); if(2*(B*BC*C)A*A || 2*(C*CA*A)B*B || 2*(A*AB*B)C*C || ABC || BCA || CAB) { printf(-1.000\n); return; } a2.*sqrt(2.*(B*BC*C)-A*A)/3.; b2.*sqrt(2.*(A*AC*C)-B*B)/3.; c2.*sqrt(2.*(A*AB*B)-C*C)/3.; p(abc)/2.; printf(%.3lf\n,sqrt(p*(p-a)*(p-b)*(p-c))); return; } int main() { while(1) kernel(); }