题目:无限的路
思路:先判断点的先后(这样可以使用后面的方法而无需多写一些不必要的代码) ,在计算相邻点的距离(这样可以避免点到点线距离的不同,无需采用一个数值代替进去,而是直接计算)
判断点先后的方法:x1+y1大于x2+y2的的点在前,相同的有规律: x1>x2&&y1<y2
判断下一个点是什么的方法:只令x1++,y1--,y1=0时开始有y=x+1,x=0,直到点到(x2,y2)结束。
一开始的思路是与前面思路相反的,导致在判断点先后时产生了一些错误。最后结果却出现了 Compilation Error的问题:
原因则是出现在头文件的先后问题上。
#include<math.h>
#include<stdio.h>
int main(){
double suan(int a1,int b1,int a2,int b2);
int x1,x2,y1,y2,n,t;
while(scanf("%d",&n)!=EOF){
while(n--){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x1+y1>x2+y2) {
t=x1; x1=x2; x2=t; t=y1; y1=y2; y2=t;
}else if(x1+y1==x2+y2){
if(x1>x2&&y1<y2){
t=x1; x1=x2; x2=t; t=y1; y1=y2; y2=t;
}
}
double sum=0;
while(y1>=0){
int ji1=x1,ji2=y1;
if(!(x1==x2&&y1==y2)){
if(y1>0) {
y1--;
x1++;
}
else {
y1=x1+1;
x1=0;
}
}
sum=sum+suan(ji1,ji2,x1,y1);
if(x1==x2&&y1==y2) {
break;
}
}
printf("%.3lf\n",sum);
}
}
}
double suan(int a1,int b1,int a2,int b2){
double t = pow(a2-a1,2)+pow(b2-b1,2);
t = sqrt(t);
return t;
}