题解:洛谷 P5708 三角形面积

【题目来源】

洛谷:P5708 【深基2.习2】三角形面积 - 洛谷

【题目描述】

一个三角形的三边长分别是 \(a\)\(b\)\(c\),那么它的面积为 \(\sqrt {p(p-a)(p-b)(p-c)}\),其中 \(p = \frac{1}{2}(a+b+c)\)输入这三个数字,计算三角形的面积,四舍五入精确到 \(1\) 位小数。

【输入】

第一行输入三个实数 \(a\)\(,\)\(b\)\(,\)\(c\),以空格隔开。

【输出】

输出一个实数,表示三角形面积。精确到小数点后 \(1\) 位。

【输入样例】

3 4 5

【输出样例】

6.0

【核心思想】

  1. 问题分析:给定三角形三边长 \(a, b, c\),利用海伦公式计算面积:\(p = \frac{a+b+c}{2}\)\(S = \sqrt{p(p-a)(p-b)(p-c)}\),结果四舍五入精确到小数点后 \(1\) 位。

  2. 算法选择

    • 海伦公式:已知三边求面积的经典公式,无需判断三角形类型
    • 数学库函数:使用 sqrt() 计算平方根,printf 格式化保留一位小数
  3. 关键步骤

    • 读入数据cin >> a >> b >> c 读取三边长
    • 计算半周长\(p = 0.5 \times (a + b + c)\)
    • 计算被开方数\(t = p \times (p - a) \times (p - b) \times (p - c)\)
    • 开方得面积ans = sqrt(t)
    • 格式化输出printf("%.1f", ans) 保留一位小数
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),固定次数的算术运算和一次开方
    • 空间复杂度:\(O(1)\),仅需常数个变量
  5. 数学公式的核心思想

    • 海伦公式普适性:对任意三角形(只要满足两边之和大于第三边),已知三边即可求面积
    • 半周长简化:引入 \(p\) 使公式形式对称,减少计算复杂度
    • 浮点精度控制printf%.1f 自动四舍五入到一位小数
    • 适用于几何计算、数学公式实现类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <iostream>   // 包含输入输出流库(Mac环境替代<bits/stdc++.h>)
#include <cmath>      // 包含数学函数库(使用sqrt函数)
using namespace std;   // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    double a, b, c;    // 定义三角形三边长度
    double p, ans, t;  // 定义中间变量:半周长p,面积ans,临时变量t

    cin >> a >> b >> c; // 输入三角形三条边长

    p = 0.5 * (a + b + c);         // 计算三角形半周长
    t = p * (p - a) * (p - b) * (p - c); // 海伦公式中间计算
    ans = sqrt(t);                 // 开平方得到最终面积

    printf("%.1f", ans);           // 格式化输出面积(保留1位小数)

    return 0;                      // 返回程序执行成功状态码
}

【运行结果】

3 4 5
6.0
posted @ 2026-08-05 15:46  团爸讲算法  阅读(29)  评论(0)    收藏  举报