题目描述
现在有一张半径为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);
}
}
1608

被折叠的 条评论
为什么被折叠?



