【深基7.例1】距离函数

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

把两点距离封装成函数,用 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;
}

复杂度

只处理三个点,时间复杂度和空间复杂度都是 O(1)O(1)

总结

重复使用的公式适合封装成函数。浮点题按题目要求用格式化字符串控制输出位数。