# 菜鸟的coding · Day 007
计算距离
题目
小f离开了蒙德,前往璃月。璃月作为岩之国,山峰众多,尤其以华光林的最为出名。小f穿过了绝云间来到了华光林, 他利用风之翼飞到了空中,发现山峰都变成了一个一个点。他突然想计算一下自己前往两个山峰再回到当前位置的最短距离, 但是他忙着操控风之翼没有办法思考,请你写一个程序帮他计算一下,他会十分感谢你。
两点 (x1, y1) 和 (x2, y2) 之间距离计算方式为 √((x1−x2)2+(y1−y2)2)。
输入:共三行,第一行两个数 (x, y) 代表小f当前位置;其余两行分别是 (x1, y1) 和 (x2, y2),代表两个山峰的位置。
输出:共一行,代表小f前往两个山峰再回到当前位置的最短距离,结果保留两位小数。
数据范围:0 ≤ x, y, x1, y1, x2, y2 ≤ 100。
提示:本题需要用到 sqrt()——sqrt(x) 返回 x 开根的浮点型结果,使用时需声明 #include "math.h"。
样例:
输入
0 0 0 3 4 0
输出
12.00
思路
写一个 dist 函数封装两点距离公式, 主函数调用三次分别计算三段路的距离,求和输出。 两种走法总距离相同,直接相加即可,不需要取最小值。
#include<bits/stdc++.h>
using namespace std;
double dist(double x1, double y1, double x2, double y2){
double distance=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return distance;
}
int main(){
double x0,y0,x1,y1,x2,y2,result;
cin>>x0>>y0>>x1>>y1>>x2>>y2;
result=dist(x0,y0,x1,y1)+dist(x0,y0,x2,y2)+dist(x1,y1,x2,y2);
printf("%.2f\n", result);
return 0;
}
复杂度分析
- 时间复杂度:O(1)。
- 空间复杂度:O(1)。
今日感受
两点距离公式直接套,没有难度。注意输出要保留两位小数,用 printf("%.2f\n", result)。