2012年2月2日木曜日

TopCoder SRM326 Div2 250Pts

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

00から99までの2桁の数ではじめる。二つの桁の数字を足す。次に、元の数字の右側の桁と二つの数字を足した結果の右側の桁をくっつける。この操作を繰り返すと、やがて元の数字に戻る。nという00以上99以下の数字が与えられたとき、元の数字に戻るまでに先述の操作を何回繰り返したかを返すメソッドを作成せよ。

私の解答はこちら。

public class AdditionCycles {

 public int cycleLength(int n) {
  int nStep = 0;
  int tmp = n;
  while( true ){
   int d1 = tmp / 10;
   int d2 = tmp % 10;
   tmp = d2 * 10 + (d1 + d2) % 10;
   nStep++;
   if( n == tmp ){
    break;
   }
  }
  return nStep;
 }

}

得点は245.10/250、中央値は約226点。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計