2011年12月13日火曜日

TopCoder SRM275 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について、おおまかに説明する。

みんなはキッチンの入り口なんかでヒンジ付きのドアをみたことがあるかと思う。下の図をみるとはっきりするだろう(図は問題文で見てください)。このヒンジ付きドアは次のように動作する。止まる場所からある方向へ押すと、ドアは押し込まれる(1st swing)。ドアから手を離すと、ドアは反対側に振れる(2nd swing)。このとき、振れる角度は直前の角度のある数倍になる。反対側に振れることを繰り返すうちに、一定の割合で触れる角度は減っていく。5度以下になった時点でドアは振れなくなり、安定する。初期の押し込み角度initialAngle(整数型)と角度が減る割合(reduction)が与えられたとき、安定するまでに何回振れたかを返すメソッドを作成せよ。ドアは直前の振れた角度よりも次に振れる角度の方が小さいことに注意せよ。

私の解答はこちら。

public class HingedDoor {

 public int numSwings(int initialAngle, int reduction) {
  int nSwings = 0;
  double currentAngle = initialAngle;
  while( true ){
   if( currentAngle <= 5.0 ) break;
   currentAngle /= reduction;
   nSwings++;
  }
  return nSwings;
 }

}

得点は246.00/250。intをdoubleで扱うことに引っかからなければ易問。訳してて思ったのは、最初の押しを1st swingとすると、誤解を招くんじゃないかということです。押しただけでは振れた回数は0になるのよね。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計