点是否在直线上
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Description
给定一条直线和一个点,判断该点是否在直线上。
Input
包含多组测试数据,每组测试数据占一行,每行6个整数x1,y1,x2,y2,x3,y3,分别表示三个点的坐标,p1(x1,y1),p2(x2,y2),p3(x3,y3),p1和p2点嗲表一条直线L。直线L保证不平行于坐标轴,p1和p2不重合。
Output
每组测试数据输出占一行,如果p3在直线L上则输出“yes”,否则输出“no”。
Sample Input
0 0 1 1 2 2
Sample Output
yes
题目分析:
看上去不难,但是实际上很容易WA……
为什么为什么为什么~不要被 “ 整数 ” 骗了哟!
整数相除的时候会自动向下取整,这道题把 int 改成 double 就能解决问题啦!
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
double x1,y1,x2,y2,x3,y3;
while(scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
{
if(x3==x1 && y3==y1 || x3==x2 && y3==y2)
{
printf("yes\n");
continue;
}
if((x3-x1)/(x2-x1)==(y3-y1)/(y2-y1))
{
printf("yes\n");
}
else
printf("no\n");
}
return 0;
}