题目描述
现在有一张半径为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
package test2;
import java.util.Scanner;
public class getStep {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
while(scan.hasNext())
{
int r = scan.nextInt();
int x = scan.nextInt();
int y = scan.nextInt();
int x1 = scan.nextInt();
int y1 = scan.nextInt();
System.out.println(getStep(r,x,y,x1,y1));
}
}
/**
* 计算移动的最少步数
* 算法思想:每次移动都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转
* 则旋转后的圆心与最初圆心的连线肯定是圆直径(2r)的倍数,如果不是整数倍需要向上取整
* */
public static int getStep(int r,int x,int y,int x1,int y1)
{
double step = 0;
double rx = Math.abs(x - x1);
double ry = Math.abs(y - y1);
step = Math.sqrt(rx*rx+ry*ry)/2*r;
//ceil向上取整函数
return (int)Math.ceil(step);
}
}