zoukankan      html  css  js  c++  java
  • uva 10347 Medians (Simple Geometry)

    uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1288

      给出三条中线的长度,求三角形的面积。

      套公式可以过,不过我不明白为什么我求出三条边以后再判断是否能构成合法的三角形是错的。

    AC的代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <cmath>
     6 
     7 using namespace std;
     8 
     9 template<class T> T sqr(T x) { return x * x;}
    10 
    11 double work(double x[], double m[]) {
    12     double s = 0.0, t[3];
    13     for (int i = 0; i < 3; i++) {
    14         if (m[i] <= 0) return -1.0;
    15         if (m[i] + m[(i + 1) % 3] <= m[(i + 2) % 3]) return -1.0;
    16     }
    17     for (int i = 0; i < 3; i++) {
    18         if (x[i] <= 0) return -1.0;
    19 //        if (x[i] + x[(i + 1) % 3] <= x[(i + 2) % 3]) return -1.0;
    20         t[i] = sqrt(x[i]);
    21         s += t[i];
    22     }
    23     s /= 2.0;
    24     return sqrt(s * (s - t[0]) * (s - t[1]) * (s - t[2]));
    25 }
    26 
    27 int main() {
    28     double med[3], x[3];
    29     while (true) {
    30         for (int i = 0; i < 3; i++) if (!(cin >> med[i])) return 0;
    31         for (int i = 0; i < 3; i++) {
    32             x[i] = (sqr(med[i]) + sqr(med[(i + 1) % 3])) * 2.0 - sqr(med[(i + 2) % 3]);
    33             x[i] *= 4.0 / 9.0;
    34 //            cout << x[i] << endl;
    35         }
    36         printf("%.3f\n", work(x, med));
    37     }
    38 }
    View Code

    我觉得是正确的一份代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <cmath>
     6 
     7 using namespace std;
     8 
     9 template<class T> T sqr(T x) { return x * x;}
    10 
    11 double work(double x[]) {
    12     double s = 0.0, t[3];
    13     for (int i = 0; i < 3; i++) {
    14         if (x[i] <= 0) return -1.0;
    15         if (x[i] + x[(i + 1) % 3] <= x[(i + 2) % 3]) return -1.0;
    16         t[i] = sqrt(x[i]);
    17         s += t[i];
    18     }
    19     s /= 2.0;
    20     return sqrt(s * (s - t[0]) * (s - t[1]) * (s - t[2]));
    21 }
    22 
    23 int main() {
    24     double med[3], x[3];
    25     while (true) {
    26         for (int i = 0; i < 3; i++) if (!(cin >> med[i])) return 0;
    27         for (int i = 0; i < 3; i++) {
    28             x[i] = (sqr(med[i]) + sqr(med[(i + 1) % 3])) * 2.0 - sqr(med[(i + 2) % 3]);
    29             x[i] *= 4.0 / 9.0;
    30 //            cout << x[i] << endl;
    31         }
    32         printf("%.3f\n", work(x));
    33     }
    34 }
    View Code

    产生差别的数据是 2 3 4。

      对于这个问题,我已经发邮件给uva的管理员,希望能等到答复。或者有大神能解答就更好了~

    ——written by Lyon

  • 相关阅读:
    mysql报错:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    MD5登陆密码的生成
    15. 3Sum、16. 3Sum Closest和18. 4Sum
    11. Container With Most Water
    8. String to Integer (atoi)
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    几种非线性激活函数介绍
    AI初探1
    AI初探
  • 原文地址:https://www.cnblogs.com/LyonLys/p/uva_10347_Lyon.html
Copyright © 2011-2022 走看看