算法设计- 绕钉子的长绳子

注意老师的查重系统鸭

Problem B. 绕钉子的长绳子

时间限制 1000 ms
内存限制 128 MB

题目描述

求出绳子的长度

输入数据

第 1 行两个数:整数 N (1≤ N≤ 100) 和实数 R 。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

样例说明

如果你用比较复杂的方法AC了,请想一想有没有更加简便的方法。

分析:实际就是求各点之间的距离加上圆的半径

// Author     : 农村娃的成长之路
// Time       : 2019/9/26 23:52
// File       : RopeLength.java
// Describe   : 求绕钉子绳子的长度
// IDE        : IntelliJ IDEA

import java.util.ArrayList;
import java.util.Scanner;

public class RopeLength {
    public static double GetDistance(double n, double x, double m, double y) {
        return Math.sqrt((n - x) * (n - x) + (m - y) * (m - y));
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        double R = in.nextDouble();
        double sum = 0.0;
        in.nextLine();
        ArrayList Origin_list = new ArrayList();
        String str = in.nextLine();
        String arr[] = str.split(" ");
        Origin_list.add(arr[0]);//原点坐标

        Origin_list.add(arr[1]);
        double x = Double.parseDouble(Origin_list.get(0).toString());
        double y = Double.parseDouble(Origin_list.get(1).toString());
        for (int i = 0; i < N - 1; i++) {
            String STR = in.nextLine();
            String ARR[] = STR.split(" ");//输入的新的坐标
            sum += GetDistance(Double.valueOf(ARR[1]), Double.parseDouble(Origin_list.get(1).toString()), Double.valueOf(ARR[0]), Double.parseDouble(Origin_list.get(0).toString()));
            //更新坐标
            Origin_list.set(0, Double.valueOf(ARR[0]));
            Origin_list.set(1, Double.valueOf(ARR[1]));
        }
        //加上终点和原点以及圆柱周长

        System.out.printf("%.2f\n", sum + 2 * Math.PI*R + GetDistance(Double.parseDouble(Origin_list.get(0).toString()), x, Double.parseDouble(Origin_list.get(1).toString()), y));
        in.close();
    }
}

我是菜鸡,大神绕道~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值