1. 程式人生 > >PAT乙級——1082(排序 or 比較)java實現

PAT乙級——1082(排序 or 比較)java實現

文章目錄

題目:射擊比賽 (20 分)

本題目給出的射擊比賽的規則非常簡單,誰打的彈洞距離靶心最近,誰就是冠軍;誰差得最遠,誰就是菜鳥。本題給出一系列彈洞的平面座標(x,y),請你編寫程式找出冠軍和菜鳥。我們假設靶心在原點(0,0)。

輸入格式:
輸入在第一行中給出一個正整數 N(≤ 10 000)。隨後 N 行,每行按下列格式給出:ID x y

其中 ID 是運動員的編號(由 4 位數字組成);x 和 y 是其打出的彈洞的平面座標(x,y),均為整數,且 0 ≤ |x|, |y| ≤ 100。題目保證每個運動員的編號不重複,且每人只打 1 槍。

輸出格式:
輸出冠軍和菜鳥的編號,中間空 1 格。題目保證他們是唯一的。

輸入樣例:
3
0001 5 7
1020 -1 3
0233 0 -1
輸出樣例:
0233 0001

題目分析及實現

首先說一下,有一個超時。

題目很簡單,圓形公式 R2 = X2 + Y2,R2 即為彈孔到圓心的距離。
只需要比較R的大小即可。

思路一

本題實現了兩種思路,第一種是定義一個類,自己定義排序。使用TreeSet方式在加入的同時自動排序。但是最後一個用例超時,大膽猜想就是因為參加對比資料太多了。

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); Set <Sportor>set = new TreeSet<>(); for(int i=0;i<num;i++) { Sportor sportor = new Sportor(in.next(), in.nextInt(), in.nextInt
()); set.add(sportor); } int time=0; for (Sportor sportor : set) { if(time==0) System.out.print(sportor.ID); time++; if(time==set.size()) System.out.print(" "+sportor.ID); } } } class Sportor implements Comparable<Sportor> { String ID; int x; int y; int Radius; public Sportor(String id, int x, int y) { this.x = x; this.y = y; this.ID = id; Radius =(int)(Math.pow(x, 2)+Math.pow(y, 2)); } @Override public int compareTo(Sportor o) { return this.Radius-o.Radius; } }

在這裡插入圖片描述

思路二

第二個思路是直接對比,儲存最遠的和最近的

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int num = in.nextInt();
		int max = 20000;//判斷得分最高,距離最近,從最遠向最近逼近
		int min = 0;//判斷得分最低,距離最遠,從最小向最遠放大
		String maxid = "";
		String minid = "";
		for (int i = 0; i < num; i++) {
			String id = in.next();
			int x = in.nextInt();
			int y = in.nextInt();
			int radius = (int) (Math.pow(x, 2) + Math.pow(y, 2));
			if (radius < max) {
				max = radius;
				maxid = id;
			}
			if (radius > min) {
				min = radius;
				minid = id;
			}
		}
		System.out.print(maxid + " " + minid);
	}
}

emmmmm,結果還是超時,問題並沒有解決,只好大膽的猜想是java的問題。