从给定case中找出一条直线使上面的点数最多
很久以前的代码了
#include "stdio.h" int pt[701][2]; int main(void) { unsigned Pnum; unsigned NumOfLine; int Fx,Fy,left; while(((scanf("%d",&Pnum)) ==1) && Pnum) { unsigned N = 0; for( size_t ix = 0 ; ix != Pnum ; ix ++ ) { scanf("%d %d",pt[ix] + 0,pt[ix] + 1); } for( size_t ix = 0 ; ix != Pnum - 1 ; ix ++ ) { for( size_t id = ix + 1 ; id != Pnum ; id ++ ) { NumOfLine = 0; Fx = (pt[ix][0] - pt[id][0]); Fy = (pt[ix][1] - pt[id][1]); left = Fx*pt[id][1] - Fy*pt[id][0]; for( size_t i = id + 1 ; i != Pnum ; i ++ ) { if( left == (Fx*pt[i][1] - Fy*pt[i][0]) ) { NumOfLine ++; } } N = N < NumOfLine ? NumOfLine : N; } } printf("%d\n",N + 2); } return 0; }