300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 最多有多少个点在同一条直线上

最多有多少个点在同一条直线上

时间:2024-03-12 13:56:24

相关推荐

最多有多少个点在同一条直线上

给出二维平面上的n个点,求最多有多少点在同一条直线上。

样例

给出4个点:(1, 2), (3, 6), (0, 0), (1, 3)。

一条直线上的点最多有3个。

import java.util.HashMap;import java.util.Map;import java.util.Scanner;/*** 给出二维平面上的n个点,求最多有多少点在同一条直线上。样例给出4个点:(1, 2), (3, 6), (0, 0), (1, 3)。一条直线上的点最多有3个。* * @author Dell**/class Point{public int x;public int y;public Point(){x=0;y=0;}public Point(int a, int b){x=a;y=b;}}public class Test168 {public static int maxPoints(Point[] points){if(points==null||points.length==0)return 0;int max=1;for(int i=0;i<points.length;i++){Map<Double,Integer> map=new HashMap<>();int tempmax=1;int repeatnumber=0;double k=0;for(int j=i+1;j<points.length;j++){if(points[j].x-points[i].x==0&&points[j].y-points[i].y==0){repeatnumber++;continue;}else if(points[j].x-points[i].x!=0){k=(double)(points[j].y-points[i].y)/(double)(points[j].x-points[i].x);}else{k=(double)Integer.MIN_VALUE;}int num=2;if(map.containsKey(k)){num=map.get(k);map.put(k,++num);}else{map.put(k, num);}tempmax=Math.max(tempmax,num);}max=Math.max(max, tempmax+repeatnumber); } return max; }public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();Point[] p=new Point[n];for(int i=0;i<n;i++){p[i]=new Point(sc.nextInt(),sc.nextInt());}System.out.println(maxPoints(p)); }}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。