2011年6月28日火曜日

TopCoder SRM195 Div2 250Pts

今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。

問題を簡単に和訳する。数値の丸めについて考える。通常は切り上げ、切り捨てと言えば、10の累乗の何倍かに丸めることを指す(554->550=55*10^1とか)。ただ、必ずしも10にする必要はなく、7や3の倍数に丸めても問題はない。そこで、nという整数が与えられたときに、bの倍数に最も近い値に丸めて返すメソッドを作成せよ。

例えば、n=100、b=3であれば、99が返ってくる。これは99(=3*33)と102(3*34)を比較すると、99の方が100に近い値になるからである。

私の解答はこちら。

public class Rounder {
 public int round(int n, int b) {
  int mod = n % b;
  if( mod >= b/2.0 ) return n-mod+b;
  return n-mod;
 }
}

得点は238.11/250。正解率は約80.7%。n%b(nをbで割った余り)がb/2.0以上か、そうでないかで分岐する。b/2以上か否かで分岐させようとすると、2)のテストケースで失敗する。bが偶数なら問題ないが、奇数の時にバグになる。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計