View Code of Problem 67

#include<stdio.h>
#include<math.h>
/* 本题借鉴前辈的思路,主要分为三大块*/
/*第一块:两条直线均不垂直与x轴,如果两条直线斜率不相同,则一定相交,如果两条直线斜率相同且截段相同则重合即相交,否则评选*/ 
/*第二大块是两条直线均垂直与x轴,如果x3==x1,则两条直线的起始点一样,一定相交,否则平行*/
/*第三大块是其中一条直线垂直于x轴,另外一条直线不垂直于x轴,则一定相交*/ 
int main()
{
	double x1,y1,x2,y2,x3,y3,x4,y4;
	while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF)//注意double的标识为%lf,float的标识为%f 
	{	scanf("%lf %lf %lf %lf",&x3,&y3,&x4,&y4);
		double k1=0,k2=0;
		if(x2!=x1&&x4!=x3){				
			k1=1.0*(y2-y1)/(x2-x1);
			k2=1.0*(y4-y3)/(x4-x3);
//			printf("%.0lf%.0lf%.0lf%.0lf",x3,y3,x4,y4);
			if(k1!=k2){
					printf("Yes\n");
			}
			else{
				if((y1-k1*x1)!=(y3-k2*x3))	
				{
					printf("No\n");
				}
				else
				{
					printf("Yes\n");
				}
					
			}
		}
		else if((x2==x1)&&(x4==x3)){				
				if(x1==x3)
				{
					printf("Yes\n");
				}			
				else
				{
						printf("No\n");
				}
				}
		else{
					printf("Yes\n");
			}
//		int a,b,c,d;
//			a=x2-x1;
//			b=y2-y1;
//			c=x4-x3;
//			d=y4-y3;
//		 if(b/a!=d/c||(b/a==d/c&&((y1-(b/a)*x1)==(y3-(d/c)*x3))))//如果斜率不相同或者斜率相同且b也相同 
//		{
//			printf("Yes\n");
//		}
//		else//如果平行 
//		{
//			printf("No\n");
//		}
		
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 67