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