题目网址:http://bas.ssoier.cn:8086/problem_show.php?pid=3255
放弃吧,不会有人给我点小心心的
3255:练42.1 计算线段长度
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 349 通过数: 213
【题目描述】
已知线段的两个端点的坐标 A(Xa,Ya),B(Xb,Yb),求线段 AB 的长度。
老师告诉了你,计算公式如下:
(图片不清楚,可以打开网址看)
【输入】
第一行是两个实数,即 A 的坐标。
第二行是两个实数,即 B 的坐标。
输入中所有实数的绝对值均不超过 10000。
【输出】
一个实数,即线段 AB 的长度,保留到小数点后 3 位。
【输入样例】
1 1
2 2
【输出样例】
1.414
---------------------------------------------------------------------------------------------------------------------------------
首先,我们需要搞清楚,这道题目要怎么做,这道题目很简单,我们只需要按照公式算出结果就可以了,但关键是怎么算出结果
首先,我们可以很轻松的算出开平方里面的式子(xa-xb)² + (ya-yb)²
这个式子,我们可以轻松算出来,我们先定义四个变量,xa、ya、xb、yb
我们要计算平方,有两种计算方法:
1、直接计算:因为(xa-xb)²=(xa-xb)*(xa-xb),所以,我们就可以把计算(xa-xb)²的式子写成:
(xa-xb)*(xa-xb)
2、运用函数计算:c++有一个自带的函数,专门用来计算幂
pow(2,3)
这个函数,计算的是2³,它的头文件是#include<cmath.h>
好,我们已经会计算平方了,那么,开平方怎么算?
我们也需要使用c++里自带的函数:sqrt,头文件是#include<math.h>
它的用法是这样的:
sqrt(你要算的数);
比如sqrt(2),就会计算出1.414……
所以,我们就可以通过公式来解决这道题目了
---------------------------------------------------------------------------------------------------------------------------------
代码:
#include<bits/stdc++.h>//这里我用的是万能头,所以就不用写sqrt的头文件
using namespace std;
int main(){
double a,b,c,d;
cin>>a>>b>>c>>d;
//xa=a xb=c
//ya=b yb=d
//也就是说,abcd就是那4个输入的数字
double e=sqrt( pow(a-c,2) + pow(b-d,2) );
//写的有点乱,我们分开看
//pow(a-c,2)计算的是(xa-xb)的平方
//pow(b-d,2)计算的是(ya-yb)的平方
//将pow(a-c,2)和pow(b-d,2)加起来,得到开平方里面的式子的答案
//最后用sqrt进行开平方的运算
cout<<fixed<<setprecision(3)<<e;//一定要记得保留3位小数
return 0;
}
于是这篇文章就这么愉快地结束了(真的有人会看到这篇文章吗)