题目描述
平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形。
现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计。
输入
第1行两个数:整数N(1<=N<=100)和实数R。
接下来N行按逆时针顺序给出N个钉子中心的坐标
坐标的绝对值不超过100
输出
一个数,绳子的长度,精确到小数点后2位。
样例输入
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
样例输出
14.28
解题思路
由画图及数学原理可知,绳子的长度=n个点围成的多边形的距离+一个圆周长度
代码
#include<cstdio>
#include<math.h>
#include<stdlib.h>
#define pi 3.1415926
struct zb
{
float x;
float y;
};
int main()
{
int n;
int i,j;
float sum=0,l,r;
struct zb a[1000];
scanf("%d%f",&n,&r);
l=pi*r*2;
for(i=0;i<n;++i)
{
scanf("%f%f",&a[i].x,&a[i].y);
}
for(i=0;i<n-1;++i)
{
sum+=sqrt((a[i+1].x-a[i].x)*(a[i+1].x-a[i].x)+(a[i+1].y-a[i].y)*(a[i+1].y-a[i].y));
}
sum+=sqrt((a[n-1].x-a[0].x)*(a[n-1].x-a[0].x)+(a[n-1].y-a[0].y)*(a[n-1].y-a[0].y));
sum+=l;
printf("%.2f\n",sum);
return 0;
}