题目描述
一天,小明坐在院子里数星星,Gardon就出了个难题给他,让他数数天上的星星最多有多少个是在同一条直线上的。天上的星星太多了,小明马上就看花了眼,你能写个程序来帮他计算么?
输入
首先输入一个整数N(N<=300),接下来的N对数每对表示一个星星的位置(星星的坐标在-10000到10000之间,精确到小数点后1位)。没有两个星星会在同一个位置。
输出
一个整数,表示一条直线上最多星星的数目。
样例输入 Copy
5
0 0
1 0
1 1
0 1
0.5 0.5
样例输出 Copy
3
数据给的比较小,两点可以确定一个斜率,所以统计该斜率上,最多的星星个数,再排序输出即可;
import java.util.Arrays;
import java.util.Scanner;
class node{
double x, y;
}
public class Main {
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int n;
int[] b = new int[100010];
node[] a = new node[510];
n = cin.nextInt();
for (int i = 1; i <= 500; i++)
a[i] = new node();
for (int i = 1; i <= n; i++)
{
a[i].x = cin.nextDouble();
a[i].y = cin.nextDouble();
}
int k = 0;
int ans = 0;
for (int i = 1; i < n; i++)
{
int cnt = 0;
for (int j = i + 1; j <= n; j++)
{
for (int u = 1; u <= n; u++)
{
if ((a[j].x - a[i].x)*(a[u].y - a[i].y) == (a[u].x - a[i].x)*(a[j].y - a[i].y))
{
b[k]++;
}
}
k++;
}
}
// System.out.println(k);
Arrays.sort(b, 0, k);
System.out.println(b[k - 1]);
}
}