Problem:
理想の体型

肥満度を表す指数としてBMI（Body Mass Index）があります。BMIの値は以下の式で計算します。

BMI = 体重(kg) / (身長(m))2

BMIの値が標準値に近いほど「理想の体型」と考えられます。そこで、BMIの標準値を 22 とした場合、対象者の情報を入力とし、最も「理想の体型」に近い人の情報を出力するプログラムを作成してください。

対象者の数を n とすると、各対象者には重複のないように1 以上 n 以下の整数値の受付番号 p が振られています。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。

n
p1 h1 w1
p2 h2 w2
:
pn hn wn

１行目に対象者の人数 n (n ≤ 1000)、続く n 行に i 人目の対象者の受付番号 pi (1 ≤ pi ≤ n)、センチメートル単位の身長 hi (1 ≤ hi ≤ 200)、キログラム単位の体重 wi (1 ≤ wi ≤ 200) が与えられます。入力は全て整数で与えられます。

Output

データセットごとに「理想の体型」に最も近い人の受付番号（整数）を１行に出力します。最も「理想の体型」に近い人が二人以上いる場合は、受付番号の小さい方を出力することとします。

Sample Input

6
1 165 66
2 178 60
3 180 72
4 160 65
5 185 62
6 182 62
3
3 160 65
2 180 70
1 170 75
0

Output for the Sample Input

3
2

Solution in JAVA (judge verdict: Accepted)

import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;

import static java.lang.Math.*;
import static java.util.Arrays.*;

public class Main{

	Scanner sc=new Scanner(System.in);

	int INF=1<<28;
	double EPS=1e-9;

	int n;
	R[] rs;

	void run(){
		for(;;){
			n=sc.nextInt();
			if(n==0){
				break;
			}
			rs=new R[n];
			for(int i=0; i<n; i++){
				int id=sc.nextInt();
				int h=sc.nextInt();
				int w=sc.nextInt();
				rs[i]=new R(id, h, w);
			}
			solve();
		}
	}

	void solve(){
		Arrays.sort(rs);
		println(""+rs[0].id);
	}

	class R implements Comparable<R>{
		int id;
		double error;

		R(int id, int h, int w){
			this.id=id;
			error=Math.abs(22-10000.*w/h/h);
		}

		@Override
		public int compareTo(R r){
			if(error+EPS<r.error){
				return -1;
			}else if(error>r.error+EPS){
				return 1;
			}else{
				return id-r.id;
			}
		}
	}

	void debug(Object... os){
		System.err.println(Arrays.deepToString(os));
	}

	void print(String s){
		System.out.print(s);
	}

	void println(String s){
		System.out.println(s);
	}

	public static void main(String[] args){
		// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
		new Main().run();
	}
}