辗转相除法,答案就是gcd(abs(x1-x2),abs(y1-y2))-1,为什么可以这样做呢? 仔细想想,求出最大公约数g,也就是把y分为g个部分组成,x也是g个部分组成,这样的话,从起点开始,每次横坐标和纵坐标分别增加相应的一部分,一直增到终点,这个过程就是模拟的过程
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
int x = Math.abs(x2-x1);
int y = Math.abs(y2-y1);
sc.close();
if(x==0&&y==0) {
System.out.println(0);
}
else {
System.out.println(gcd(x,y)-1);
}
}
private static int gcd(int a,int b) {
if(b == 0) {
return a;
}
return gcd(b,a%b);
}
}