读入两端点坐标,按勾股定理求线段长度并保留 3 位小数。
OJ: roj
题目 ID: 1033
难度:入门
标签:入门数学浮点数python
创建: 2026-09-29 15:03
更新: 2026-10-04 23:00
题目描述
已知线段两端点 1 1\n2 2;样例输出:1.414。
思路
按勾股定理 %.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;
}