这个题是要判断两点间是否有符合的整数点共线、
解题思路:
判断三点共线公式为:(x2-x1)*(y3-y1)=(y2-y1)*(x3-x1)。刚开始我采用该公式判断,发现超时了,网上看了下发现了求公约数的方法,这种方法用到了相似三角形原理。
对于A、C两点它们之间如果存在整数点F与它们共线,则必有AB/BC=AE/EF,则AB与BC必有不为1的公约数,所以现在的问题由判断是否存在整数点共线变成横向距离和纵向距离是否互质了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 using namespace std; 3 #include<math.h> 4 int gcd(int a,int b) 5 { 6 if(b==0) 7 return a; 8 return gcd(b,a%b); 9 } 10 int main() 11 { 12 int l,sx,sy,dx,dy,x; 13 while(scanf("%d",&l)!=EOF) 14 { 15 if(l==0) return 0; 16 scanf("%d %d %d %d",&sx,&sy,&dx,&dy); 17 x=gcd(abs(sx-dx),abs(sy-dy)); 18 if(abs(dx)>l || abs(dy)>l ) 19 { 20 printf("Out Of Range\n"); 21 } 22 else if((x-1)!=0 ||(sx==dx && abs(dy-sy)!=1) || (sy==dy && abs(sx-dx)!=1) ) 23 printf("No\n"); 24 else 25 printf("Yes\n"); 26 } 27 return 0; 28 }