一天,小希坐在院子里数星星,Gardon就出了个难题给她,让她数数天上的星星最多有多少个是在同一条直线上的。天上的星星太多了,小希马上就看花了眼,你能写个程序来帮她计算么?
输入格式
输入包含多组数据,每组数据的开头是一个整数N(N<=300),接下来的N对数每对表示一个星星的位置(星星的坐标在-10000到10000之间,精确到小数点后1位)。没有两个星星会在同一个位置。
输出格式
一个整数,表示一条直线上最多星星的数目。
样例输入
5 0 0 1 0 1 1 0 1 0.5 0.5
样例输出
3暴力枚举
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct P
{
float x,y;
}a[301];
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
for(int i=0;i<n;i++)
scanf("%f %f",&a[i].x,&a[i].y);
int ans=1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int sum=2;
for(int k=j+1;k<n;k++)
{
if((a[i].x-a[j].x)*(a[j].y-a[k].y)==(a[j].x-a[k].x)*(a[i].y-a[j].y))
sum++;
}
if(sum>ans) ans=sum;
}
}
printf("%d\n",ans);
}
return 0;
}