1 条题解

  • 0
    @ 2025-8-24 21:02:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Dry_ice
    Я всегда буду любить мисс Tracy Reznik.

    搬运于2025-08-24 21:02:48,当前版本为作者最后更新于2021-07-09 23:30:37,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    基础练手题。

    基本思路

    这是一道在坐标系上的海伦公式计算,首先需要会做计算两点之间距离这题,学会运用勾股定理解决两坐标点间距离计算的问题,再利用海伦秦九韶公式计算这道题目。

    推导过程

    根据B2030的经验,我们知道:一个平面直角坐标系内有两点 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2),那么两点之间距离为:

    dis=(x1x2)2+(y1y2)2dis=\sqrt{(x_1 - x_2)^2+(y_1-y_2)^2}

    可以用勾股定理求解。

    • 海伦秦九韶公式

    令三角形三边长分别为 aabbcc

    先摆海伦:S=p(pa)(pb)(pc)S=\sqrt{p(p-a)(p-b)(p-c)},其中 p=a+b+c2p=\frac{a+b+c}{2} 即周长的一半。

    但是我们是中国人,所以看看老祖宗的东西,秦九韶公式:

    $$S=\sqrt{\frac{1}{4}[a^2b^2-(\frac{a^2+b^2-c^2}{2})^2]} $$

    然而实际上这两个柿子是相同的,可以通过乘法公式和因式分解相互推倒。

    综上,根据 disdisSS 的计算方法,我们就能轻松搞定这道让人头疼的题目了。

    CODE

    #include <stdio.h>
    #include <math.h>
    double x1, y11, x2, y2, x3, y3, a, b, c, p;
    inline double dis(double x1, double y11, double x2, double y2) {
        return sqrt((x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2));
    } //给定坐标计算两点之间距离
    int main(void) {
        scanf("%lf %lf %lf %lf %lf %lf", &x1, &y11, &x2, &y2, &x3, &y3);
        a = dis(x1, y11, x2, y2);
        b = dis(x2, y2, x3, y3);
        c = dis(x3, y3, x1, y11);
    /*
    a, b, c为三边边长
    */
        p = (a + b + c) / 2; //p为周长一半
        printf("%.2lf\n", sqrt(p * (p - a) * (p - b) * (p - c))); //直接用简单的海伦公式即可
        return 0;
    }
    

    喜欢就点个赞吧qwq

    • 1

    信息

    ID
    6888
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    2
    已通过
    2
    上传者