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

  • 相关阅读:
    git remote和git clone新项目后如何拉取分支代码到本地
    PHP 文件上传
    PHP 小学生99乘法表
    PHP 递归删除目录
    PHP 如何封装水印函数
    【转】设计模式六大原则(1):单一职责原则
    ubuntu 下安装 activate-power-mode
    ubuntu中使用virtualbox遇到Kernel driver not installed (rc=-1908)错误
    【转】使用SQL语句创建和删除约束
    ORA-02291:parent key not found
  • 原文地址:https://www.cnblogs.com/LyonLys/p/uva_10347_Lyon.html
Copyright © 2011-2022 走看看