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

题目描述

给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3),坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。

对于平面上的两个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2),则这两个点之间的距离 d i s = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 dis=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2} dis=(x2x1)2+(y2y1)2

输入格式

输入三行,第 i i i 行表示坐标 ( x i , y i ) (x_i,y_i) (xi,yi),以一个空格隔开。

输出格式

输出一个两位小数,表示由这三个坐标围成的三角形的周长。

样例输入

0 0
0 3
4 0

样例输出

12.00

提示

数据保证,坐标均为实数且绝对值不超过 100 100 100,小数点后最多仅有 3 3 3 位。

参考代码

#include<bits/stdc++.h>
using namespace std;
struct node {
	double x, y;
};
double dis(node a, node b) {
	double s = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
	return s;
}
int main() {
	node a, b, c;
	cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;
	double res = dis(a, b) + dis(b, c) + dis(a, c);
	cout << fixed << setprecision(2) << res;
	return 0;
}
<think>嗯,用户问的是洛谷的C++题目P5735,我需要先确认这道题的具体内容。首先,洛谷是一个在线的算法题库,里面有很多编程题目,P5735应该是某个题目的编号。 我应该先查找P5735的题目内容。记得之前可能接触过类似的题目,但不确定具体是哪一道。可能需要回忆或者模拟一下常见的题目类型。比如,洛谷的题目通常涉及础算法、数学问题或者数据结构等。题目编号P5735可能属于入门或础难度的题目。 假设题目是关于计算几何的,比如计算两点之间的距离,或者更复杂的几何形状的面积。或者可能是数组操作,比如排序、查找等。也有可能涉及到字符串处理或者简单的动态规划。 用户提到的是C++,所以需要给出C++的解答方法。可能需要提供代码示,但根据之前的对话,用户可能需要先理解题目的要求和解题思路,再给出具体的实现步骤。 接下来,我需要模拟用户可能的疑问。比如,用户可能卡在某个具体的步骤上,比如如何计算多边形的周长,或者如何处理输入输出格式。或者可能对题目的某个条件不太理解,需要解释清楚题目的要求。 另外,考虑到用户可能刚开始学习编程,解答需要详细且步骤清晰。可能需要分步骤解释,比如先读入数据,再处理数据,最后输出结果。同时要注意代码的正确性和效率,是否符合题目的时间限制和内存限制。 可能还需要考虑一些常见的错误,比如浮点数精度问题,或者在计算过程中出现的边界情况。如,如果题目涉及到浮点数运算,需要提醒用户注意数据类型的选择,避免精度丢失。 另外,如果题目涉及到数学公式,比如计算两点间的欧几里得距离,可能需要给出公式的推导过程,并用LaTeX格式呈现,如$d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$,这样用户更容易理解。 还要检查是否需要处理多组输入,或者输入是否有特定的格式。比如,题目可能要求输入多个点的坐标,然后计算这些点组成的多边形的周长。这时候需要读取每个点的坐标,并依次计算相邻点之间的距离,最后累加得到周长。 在代码实现部分,可能需要使用结构体或数组来存储点的坐标,然后用循环遍历计算每对相邻点之间的距离。同时,要注意最后一个点和第一个点是否需要连接,如果是闭合多边形的话。 此外,可能还需要考虑输入的坐标是整数还是浮点数,这会影响到变量的数据类型选择。如,使用double类型来存储坐标和计算结果,以确保精度。 最后,测试样也是重要的,需要提供一些测试用,帮助用户验证他们的代码是否正确。比如,输入几个点的坐标,手动计算周长,然后与程序输出对比,确保结果一致。 总结一下,解答这个问题的步骤可能包括:理解题目要求,分析输入输出格式,设计算法步骤,处理数据结构和计算逻辑,编写代码,测试和调试。需要将这些步骤详细地解释给用户,确保他们能够跟随并理解每个部分。</think>--- ### 题目简介 **洛谷P5735** 是一道础编程题,题目名为 **“【7.1距离函数”**,属于数学计算类问题。 **核心目标**:输入平面直角坐标系中三个点的坐标,计算并输出这三点组成的三角形的周长。 **难度**:入门级(适合掌握本输入输出和数学运算的C++初学者)。 --- ### 题目要求 #### 输入格式 输入共三行,每行两个实数 $x_i, y_i$,表示三个点的坐标 $(x_1,y_1),(x_2,y_2),(x_3,y_3)$。 **示输入**: ``` 0 0 0 3 4 0 ``` #### 输出格式 输出一个两位小数的浮点数,表示三角形周长。 **示输出**: ``` 12.00 ``` --- ### 解题思路 1. **计算两点间距离** 使用欧几里得距离公式: $$ d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} $$ 2. **计算三边长度** 分别计算 $AB$, $BC$, $CA$ 三边的距离。 3. **累加求和** 将三边长度相加得到周长。 --- ### C++代码实现 ```cpp #include <iostream> #include <cmath> #include <iomanip> // 用于控制输出格式 using namespace std; // 计算两点间距离函数 double distance(double x1, double y1, double x2, double y2) { return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); } int main() { double x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; // 计算三边长度 double d1 = distance(x1, y1, x2, y2); double d2 = distance(x2, y2, x3, y3); double d3 = distance(x3, y3, x1, y1); // 输出周长,保留两位小数 cout << fixed << setprecision(2) << d1 + d2 + d3 << endl; return 0; } ``` --- ### 代码解析 1. **输入处理** - 使用 `cin` 读取三个点的坐标,存储为浮点数 `double` 类型。 2. **函数封装** - 定义 `distance` 函数计算两点间距离,避免重复代码。 3. **数学计算** - `sqrt()` 和 `pow()` 函数需包含头文件 `<cmath>`。 4. **输出控制** - 使用 `fixed << setprecision(2)` 固定小数位数,确保输出两位小数。 --- ### 测试样验证 输入: ``` 0 0 0 3 4 0 ``` 计算过程: 1. $AB$ 边长:$\sqrt{(0-0)^2 + (3-0)^2} = 3.00$ 2. $BC$ 边长:$\sqrt{(4-0)^2 + (0-3)^2} = 5.00$ 3. $CA$ 边长:$\sqrt{(4-0)^2 + (0-0)^2} = 4.00$ 4. 周长:$3 + 5 + 4 = 12.00$ 输出结果与题目示一致,代码逻辑正确。 --- ### 常见问题 1. **为什么用 `double` 而不用 `float`?** `double` 精度更高(15-17位有效数字),避免计算误差导致答案错误。 2. **是否需要判断三点共线?** 题目默认输入为合法三角形,无需额外判断。 如果需要其他优化(如减少重复计算)或更详细的解释,请随时补充提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值