平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。
现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。
求出绳子的长度
第1行两个数:整数N(1<=N<=100)和实数R。
接下来N行按逆时针顺序给出N个钉子中心的坐标坐标的绝对值不超过100。
一个数,绳子的长度,精确到小数点后2位。
14.28
思路:绳子的长度为2*PI*R+所有相邻点的距离。因为绳子逆时针绕一圈又回到原点所以应该是2*PI*R,不在弧上的点是直线。图下(画的不好不要介意)。下面是C++代码段。sqrt(x*x+y*y)也可以用hypot(double x,double y)来代替。
#include<iostream> #include<math.h> using namespace std; const int N=100; const double PI=3.1415926; int main() { int n; double r; double x_arr[N],y_arr[N]; cin>>n>>r; for(int i=0;i<n;i++) { cin>>x_arr[i]>>y_arr[i]; } double len=0; for(int i=0;i<n-1;i++) { len=len+sqrt((x_arr[i]-x_arr[i+1])*(x_arr[i]-x_arr[i+1])+(y_arr[i]-y_arr[i+1])*(y_arr[i]-y_arr[i+1])); } len=len+sqrt((x_arr[0]-x_arr[n-1])*(x_arr[0]-x_arr[n-1])+(y_arr[0]-y_arr[n-1])*(y_arr[0]-y_arr[n-1])) ; len=len+2*PI*r; printf("%.2f\n",len); return 0; }