Java练习 SDUT-2240_织女的红线
织女的红线
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
好久不见牛郎哥哥了,织女非常想他,但是她想考验一下牛郎在她不在的日子里有没有好好学习天天向上,于是乎
想出一个问题考一考他。织女找了一跟很细的红线和N颗相同的钉子,将各颗钉子钉在墙上作为一个多边
形的各个顶点,然后将红线缠在各个钉子上围成了多边形,多余的剪掉。下面给出了图示。
可惜牛郎不会算,悲剧了,但他不想让织女失望,还好有你这个朋友,你的任务是帮他计算出红线的长度。
Input
在输入数据的第一行有两个数:N——钉子的数目(1 <= N <= 100),R——钉子的半径。所有的钉子半径
相同。接下来有N行数据,每行有两个空格隔开的实数代表钉子中心的坐标。坐标的绝对值不会超过
100。钉子的坐标从某一颗开始按照顺时针或逆时针的顺序给出。不同的钉子不会重合。
Output
输出一个实数(小数点后保留两位)————红线的长度。
Sample Input
4 1
0.0 0.0
2.0 0.0
2.0 2.0
0.0 2.0
Sample Output
14.28
Hint
Source
tongjiantao
import java.util.*;
public class Main
{
static public void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int n,r,i;
double sum;
n = cin.nextInt();
r = cin.nextInt();
sum = (double)r * Math.PI * 2;
point a[] = new point[n];
for(i=0;i<n;i++)
a[i] = new point(cin.nextDouble(),cin.nextDouble());
for(i=1;i<n;i++)
sum += a[i].dis(a[i-1]);
sum += a[0].dis(a[n-1]);
System.out.printf("%.2f\n",sum);
cin.close();
}
}
class point
{
double x,y;
point(double x,double y)
{
this.x = x;
this.y = y;
}
double dis(point a)
{
return Math.sqrt((x-a.x)*(x-a.x) + (y-a.y)*(y-a.y));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现