ZZULIOJ 1196: 数星星(二)(结构体专题)

题目描述

一天,小明坐在院子里数星星,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]);
	}
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值