0159-The Best Boy
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0159&lang=jp
実数の取り扱いに割と苦労した。
問題概要
複数の生徒の生徒番号・体重・身長が与えられるので、最もBMIが22に近い生徒の生徒番号を出力するという問題。
考え方
与えられた生徒の情報を、BMIの22との差及び生徒番号でソートする。
ソート後の第一要素が答えとなる。
実装(C++/インクルード省略)
struct body{ int i; double bmi; }; int cmpbody(const body *a,const body *b){ if(a->bmi > b->bmi){ return 1; } else if(a->bmi < b->bmi){ return -1; } else return a->i-b->i; } int main(){ int n; int i;double h,w; for(;;){ scanf("%d",&n); if(n==0)return 0; body d[n]; for(int j=0;j<n;j++){ scanf("%d %lf %lf",&i,&h,&w); h/=100; d[j].i=i; d[j].bmi=fabs(22.0-w/(h*h)); } qsort(d,n,sizeof(body),(int(*)(const void*,const void*))cmpbody); printf("%d\n",d[0].i); } return 0; }