題目:無限的路
思路:先判斷點(diǎn)的先后(這樣可以使用后面的方法而無需多寫一些不必要的代碼) ,在計(jì)算相鄰點(diǎn)的距離(這樣可以避免點(diǎn)到點(diǎn)線距離的不同盖高,無需采用一個(gè)數(shù)值代替進(jìn)去慎陵,而是直接計(jì)算)
判斷點(diǎn)先后的方法:x1+y1大于x2+y2的的點(diǎn)在前,相同的有規(guī)律: x1>x2&&y1<y2
判斷下一個(gè)點(diǎn)是什么的方法:只令x1++喻奥,y1--,y1=0時(shí)開始有y=x+1席纽,x=0,直到點(diǎn)到(x2撞蚕,y2)結(jié)束润梯。
一開始的思路是與前面思路相反的,導(dǎo)致在判斷點(diǎn)先后時(shí)產(chǎn)生了一些錯(cuò)誤。最后結(jié)果卻出現(xiàn)了 Compilation Error的問題:
原因則是出現(xiàn)在頭文件的先后問題上纺铭。
#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;
}