牛客网---2016---蘑菇街搬圆桌

来源:互联网 发布:美国人评价张桃芳 知乎 编辑:程序博客网 时间:2024/04/30 20:02

题目:
现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
输入:
一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)

2 0 0 0 4

输出:
输出一个整数,表示答案

1

解析:
1 . 题目可能比较难懂,其实很简单,在我看来就是求直线距离。
2 . 这种破题目居然有坑
如果我们直接计算出两点的距离,然后除以直径求解,测试数据只能通过80%。
所以应当给把数据缩小,缩小方法嘛。。。。简单来说,你转换成long没毛病。
解题所需函数:
1 . 转换为绝对值数据,转换为int型数据方法

double s=Math.sqrt(dx*dx+dy*dy);// 直接将s转换为int 采用向上取整的方法int step = (int)Math.ceil(s);// 直接将s转换为int 采用向下取整的方法int step = (int)Math.floor(s);// 直接将s转换为int 采用四舍五入的的方法int step = (int)Math.round(s);

代码:

import java.util.Scanner;public class Main {    public static void main(String[] args) {        // 获取数据        Scanner in = new Scanner(System.in);        while (in.hasNext()) {            int r = in.nextInt();            int x = in.nextInt();            int y = in.nextInt();            int x1 = in.nextInt();            int y1 = in.nextInt();             // 换句话讲,其实两个点最大的允许距离是直径,所以按照执行等比例缩小            double dx=Math.abs((x1-x))/(2*r);            double dy=Math.abs((y1-y))/(2*r);            double s=Math.sqrt(dx*dx+dy*dy);            // 直接将s转换为int 采用不足进位的方法            int step = (int)Math.ceil(s);            System.out.println(step);               }        in.close();    }}
原创粉丝点击