202009-1 检测点查询

称检测点查询

在这里插入图片描述

package practice;

import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

import javax.xml.namespace.QName;

public class practice1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int x = sc.nextInt();
		int y = sc.nextInt();
		int[] N = new int[n];
		int[] Nx = new int[n];
		int[] Ny = new int[n];
		for (int i = 0; i < n; i++) {//将测试点的横纵坐标分别存到数组中
			int j = sc.nextInt();
			int k = sc.nextInt();
			Nx[i] = j;
			Ny[i] = k;
		}
		for (int i = 0; i < n; i++) {//分别计算到测试点的距离
			int m = (x-Nx[i])*(x-Nx[i])+(y-Ny[i])*(y-Ny[i]);
			N[i]=m;
		}
		int t=N[0];
		for(int i=0;i<n;i++) {//求取距离最小值,存到t中
			if (N[i]<t) {
				t=N[i];	
				}
			}
		int min =0;
		for (int i = 0; i < n; i++) {//求取最小值对应的最近的编号,存到min中
			if (N[i]==t) {
				min = i;
				break;
			}
		}
		
		int p = t;
		for (int i = 0; i < n; i++) {//求取最第二小的值,存到p中
			if (N[i]>=t&&i!=min) {//判断若大于等于(防止一样)并且编号一样,考虑若和t一样大时,取了t的值,在后面的循环判断中就无法改变了。
				p=N[i];
				break;
			}
		}
		for (int i = 0; i < n; i++) {//将次小值存到p中。
			if (i==min) {
				continue;
			}else if (N[i]<p) {
				p=N[i];
			}
		}
		int min1 = 0;
		for (int i = 0; i < n; i++) {//将次小值的编号存到min1中
			if (N[i]==p&&i!=min) {//避免距离相等时,编号相等
				min1=i;
				break;
			}
		}
		
		int q = p;
		int min2 = 0;
		for (int i = 0; i < n; i++) {//第三小值的存储,将第三小值存到q中。
			if (N[i]>=p&&i!=min&&i!=min1) {//和p值存储的判断时一样的。
				q=N[i];
				break;
			}
		}
		for (int i = 0; i < n; i++) {//存q值
			if (i==min||i==min1) {//排除次小值和最小值
				continue;
			}else if (N[i]<q) {
				q=N[i];
			}
		}
		for (int i = 0; i < n; i++) {//将第三小值的编号存到min2中
			if (N[i]==q&&i!=min&&i!=min1) {//避免重复
				min2=i;
				break;
			}
		}
		
		System.out.print(min+1+"\n");//输出
		System.out.print(min1+1+"\n");
		System.out.print(min2+1+"\n");
		
			
		}		
	}

总结

在java中,接口comparable使我们经常要接触到的,比如对集合或者数组进行排序,我们经常使用到Arrays.sort()或者Collections.sort().当集合中的对象是自定义的对象时,我们有两种方法能够使排序方法应用到自定义对象的集合(数组)中。下面我们介绍Comparable的用法。
Comparable的用法为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值