##
Input
第一个数是正整数N(≤100)。代表数据的组数。
每组数据由四个非负整数组成x1,y1,x2,y2;所有的数都不会大于100。
Output
对于每组数据,输出两点(x1,y1),(x2,y2)之间的折线距离。注意输出结果精确到小数点后3位。
Sample Input
5
0 0 0 1
0 0 1 0
2 3 3 1
99 99 9 9
5 5 5 5
Sample Output
1.000
2.414
10.646
54985.047
0.000
#include "stdio.h"
#include"math.h"
double distance(int x, int y){
double dis = 0;
double segment = sqrt(2.0);
//45读线的总和
for(int i = 0; i <= x+y ; i ++)
dis += (i * segment);
//减去多加的一部分
dis -=(y * segment);
//加上斜线的总和
// 勾股定理
for(int i = 0; i < x+y; i ++){
dis += sqrt((double)i * i +(double)(i+1) *(i+1));
}
return dis;
}
int main(){
int count,x1,x2,y1,y2;
scanf("%d",&count);
while(count --){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
//递推算法
//先计算从(0,0)到(x1,y1)
// 在计算差值
double ans = fabs(distance(x1,y1) - distance(x2,y2));
printf("%0.3f\n",ans);
}
return 0;
}
采用递推的思想,用距离之差算结果