三重循环来逐个找在一条直线上面的最多点数
#include <stdio.h>
typedef struct
{
int x, y;
} poi;
poi p[750];
int main()
{
int n , i , j , k , temp , k1 , k2 , max;
while(scanf("%d",&n) && n)
{
max = 0;
for( i = 0 ; i < n ; i++ )
scanf("%d%d",&p[i].x,&p[i].y);
for( i = 0 ; i < n ; i++ )
{
for( j = i+1 ; j < n ; j++ )
{
temp = 0;
for( k = j+1 ; k < n ; k++ )
{
k1 = (p[i].x-p[k].x)*(p[j].y-p[k].y);
k2 = (p[i].y-p[k].y)*(p[j].x-p[k].x);
if(k1 == k2)
temp++;
}
max = max > temp? max : temp;
}
}
printf("%d\n",max+2);
}
return 0;
}