今日の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 件のコメント:
コメントを投稿