题目

小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 函数封装两点距离公式, 主函数调用三次分别计算三段路的距离,求和输出。 两种走法总距离相同,直接相加即可,不需要取最小值。

C++ · p72.cpp
#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)

← 返回菜鸟的coding