给出一些点,求最多有多少点在同一直线上。
对于点(x1,y1),(x2,y2),(x3,y3),如果它们在同一条直线上,则满足(x1-x2)/(y1-y2)=(x1-x3)/(y1-y3),
变形之后得(x1-x2)*(y1-y3)=(x1-x3)*(y1-y2)。
#include<stdio.h>
struct node
{
int x;
int y;
}point[701];
int main()
{
int n,i,j,k,max,p;
while(scanf("%d",&n)&&n!=0)
{
max=0;
for(i=0;i<n;i++)
scanf("%d%d",&point[i].x,&point[i].y);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
p=0;
for(k=j+1;k<n;k++)
{
if((point[i].x-point[j].x)*(point[i].y-point[k].y)==(point[i].x-point[k].x)*(point[i].y-point[j].y))
p++;
}
if(p>max)
max=p;
}
printf("%d\n",max+2);
}
return 0;
}