把两点距离封装成函数,用 hypot 计算三条边长并格式化输出周长。
OJ: luogu
题目 ID: P5735
难度:入门
标签:数学函数模拟python
日期: 2026-07-15 21:08
题意
给出平面上三个点的坐标,求它们围成的三角形周长,结果保留两位小数。
思路
两点距离公式是:
text
sqrt((x1-x2)^2 + (y1-y2)^2)Python 标准库 math.hypot(dx, dy) 可以直接计算 sqrt(dx*dx + dy*dy)。把距离计算封装成函数:
python
def distance(p, q):
return hypot(p[0] - q[0], p[1] - q[1])读入三个点后,分别计算三条边并相加即可。
这题是函数封装和浮点格式化练习,不创建 brute.py。
Python 知识
/home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:用map(float, input().split())读取一行两个实数。/home/rainboy/mycode/hugo-blog/content/program_language/python/math_tools.md:浮点计算和格式化输出时要关注误差与保留位数。math.hypot(dx, dy)表达二维距离更直接。f"{perimeter:.2f}"输出两位小数。
代码
python
from math import hypot
def distance(p, q):
return hypot(p[0] - q[0], p[1] - q[1])
points = [tuple(map(float, input().split())) for _ in range(3)]
perimeter = (
distance(points[0], points[1])
+ distance(points[1], points[2])
+ distance(points[2], points[0])
)
print(f"{perimeter:.2f}")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;
// 计算两点之间的欧几里得距离
double dist(double x1, double y1, double x2, double y2) {
double dx = x1 - x2;
double dy = y1 - y2;
return sqrt(dx * dx + dy * dy);
}
int main() {
double x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
double ans = dist(x1, y1, x2, y2)
+ dist(x2, y2, x3, y3)
+ dist(x3, y3, x1, y1);
printf("%.2f", ans);
return 0;
}复杂度
只处理三个点,时间复杂度和空间复杂度都是
总结
重复使用的公式适合封装成函数。浮点题按题目要求用格式化字符串控制输出位数。