蓝桥杯 共线
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定2维平面上n个整点的坐标,一条直线最多能过几个点?
输入格式
第一行一个整数n表示点的个数
以下n行,每行2个整数分别表示每个点的x,y坐标。
输出格式
输出一个整数表示答案。
样例输入
5
0 0
1 1
2 2
0 3
2 3
样例输出
3
数据规模和约定
n<=1500,数据保证不会存在2个相同的点。
点坐标在int范围内
1.JAVA代码
代码如下(示例):
public class Main {
public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
point points[]=new point[n];
for (int i = 0; i < points.length; i++) {
int x=scanner.nextInt();
int y=scanner.nextInt();
points[i]=new point(x, y);
}
if(n<3)
{
System.out.println(n);
}
else {
int res=2;
for (int i = 0; i < points.length-1; i++) {
for (int k =i+1 ; k < points.length; k++) {
int x=points[i].x;
int y=points[i].y;
int xx=x-points[k].x;
int yy=y-points[k].y;
int cnt=2;
for (int j = 0; j < points.length&&j!=i&&j!=k; j++) {
if((points[j].x-x)*yy==(points[j].y-y)*xx)
{
cnt++;
}
}
res=Math.max(res, cnt);
}
}
System.out.println(res);
}
}
static class point
{
int x;
int y;
public point(int x,int y) {
this.x=x;
this.y=y;
}
}
}
2.结果
代码如下(示例):