计算线段长度

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

读入两端点坐标,按勾股定理求线段长度并保留 3 位小数。

OJ: roj

题目 ID: 1033

难度:入门

标签:入门数学浮点数python

创建: 2026-09-29 15:03

更新: 2026-10-04 23:00

题目描述

已知线段两端点 A(Xa,Ya)A(X_a,Y_a)、B(Xb,Yb)B(X_b,Y_b),求 ABAB 的长度并保留到小数点后 3 位。第一行 Xa,YaX_a,Y_a,第二行 Xb,YbX_b,Y_b,坐标绝对值 ≤10000\le 10000。样例输入:1 1\n2 2;样例输出:1.414。

思路

按勾股定理 (Xa−Xb)2+(Ya−Yb)2\sqrt{(X_a-X_b)^2+(Y_a-Y_b)^2} 直译;输出用 %.3f 一次完成四舍五入与补零。

参考代码

Python 版:

python
#!/usr/bin/env python3
# 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-09-29 15:04
# update_at: 2026-09-29 15:04

import math
import sys


def solve() -> None:
    """读入两端点坐标,按勾股定理求线段长度并保留 3 位小数。"""
    xa, ya, xb, yb = map(float, sys.stdin.buffer.read().split())  # 行结构不影响 token 顺序
    print(f"{math.hypot(xa - xb, ya - yb):.3f}")  # hypot = 内部带缩放的 sqrt(dx^2+dy^2)


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

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-10-04 23:00
 * update_at: 2026-10-04 23:00
 */

#include <cstdio>
#include <cmath>

int main() {
    double xa, ya, xb, yb;
    std::scanf("%lf %lf %lf %lf", &xa, &ya, &xb, &yb);  // 一次读四个实数,容忍两行或一行
    double dx = xa - xb;
    double dy = ya - yb;
    double len = std::sqrt(dx * dx + dy * dy);  // 勾股定理求线段长度
    std::printf("%.3f\n", len);                  // 定点格式:四舍五入并补零到 3 位小数
    return 0;
}