改题需先判断哪个在前哪个在后,然后在求长度,先判断这个两个点是否在同一条直线上,如果不在,再前一个点到(x1+y1,0)或者到(0,x1+y1)的距离,然后在把这个前一个点的坐标转化为(x1+y1,0)或者到(0,x1+y1),然后继续和后一个点比较,如果不在同一条线上,则求(x1+y1,0)–>(0,x1+y1+1)或者是(0,x1+y1)–>(x1+y1+1,0)的距离,依次类推
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n-->0) {
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
if (x1+y1>x2+y2) {
int temp;
temp = x1;
x1 = x2;
x2 = temp;
temp = y1;
y1 = y2;
y2 = temp;
}
if (x1+y1 == x2+y2) {
if (x1>x2) {
int temp;
temp = x1;
x1 = x2;
x2 = temp;
temp = y1;
y1 = y2;
y2 = temp;
}
}
double sum = 0;
while(!(x1==x2 && y1==y2)){
if (x1+y1<x2+y2) {
if (y1>0) {
sum += Math.sqrt(y1*y1*2);
x1 = x1+y1;
y1 = 0;
}else {
sum += Math.sqrt(x1*x1+(x1+1)*(x1+1));
y1 = x1+1;
x1 = 0;
}
}else {
sum += Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
break;
}
}
System.out.printf("%.3f",sum);
System.out.println();
}
}
}