【深基2.习2】三角形面积

GitHub跳转原题关系图返回列表

用海伦公式计算面积,再用格式化字符串保留一位小数。

OJ: luogu

题目 ID: P5708

难度:入门

标签:python入门数学浮点

日期: 2026-07-15 17:56

题意

给出三角形三边 a,b,ca,b,c,用海伦公式计算面积:

p=a+b+c2,S=p(pa)(pb)(pc) p=\frac{a+b+c}{2},\quad S=\sqrt{p(p-a)(p-b)(p-c)}

输出面积,保留 11 位小数。

思路

题目已经给出公式。Python 中可以从 math 模块导入 sqrt 计算平方根,然后用 f-string 控制输出为一位小数。

brute.py 不适合这题,因为没有可枚举的方案空间;公式计算就是完整解法。

Python 知识

  • from math import sqrt 只导入平方根函数,调用时直接写 sqrt(...)
  • map(float, input().split()) 把三个输入 token 转成浮点数。
  • / 是浮点除法,计算半周长 p 很自然。
  • f"{area:.1f}" 控制输出固定 11 位小数。

对应的本地 Python 笔记:

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:浮点输入和格式化输出背景。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:按题面控制输出格式。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/math_tools.md:常用数学工具与浮点注意事项。

代码

python
from math import sqrt

a, b, c = map(float, input().split())
p = (a + b + c) / 2
area = sqrt(p * (p - a) * (p - b) * (p - c))

print(f"{area:.1f}", end="")
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

#include <bits/stdc++.h>
using namespace std;

int main() {
    double a, b, c; // 三角形三边长度
    cin >> a >> b >> c;
    // 海伦公式:先算半周长 p,再求面积
    double p = (a + b + c) / 2;
    double area = sqrt(p * (p - a) * (p - b) * (p - c));
    // 保留 1 位小数输出
    printf("%.1f\n", area);
    return 0;
}

复杂度

只做常数次浮点运算,时间复杂度 O(1)O(1),空间复杂度 O(1)O(1)

总结

公式题要把题目给出的数学式直接翻译成代码。输出精度是这题最容易漏的细节,最后用 :.1f 固定一位小数。