このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
整数の桁の和は10進数で書かれた桁の和である。例えば1234は1+2+3+4=10になる。さて、A、B、Cという3つの整数が与えられる。AとBの間にあるXという整数で、Xの桁の和とCの桁の和の差の絶対値が最小になるものを返せ。もし複数のXがあり得るなら、その中で最小のものを返せ。
私の解答はこちら。
public class MinimalDifference { public int findNumber(int A, int B, int C) { int target = digit_sum(C); int diff = Integer.MAX_VALUE; int ans = A; for( int i=A ; i<=B ; i++ ){ int currentDiff = Math.abs(target - digit_sum(i)); // 差の絶対値の計算 if( currentDiff < diff ){ // Xの更新作業 diff = currentDiff; ans = i; } } return ans; } private int digit_sum(int num){ // 桁の和を計算する関数 // while文で0になるまで10で割った余りを足し、10で割ることを繰り返す方法もある String snum = "" + num; int s = 0; for( int i=0 ; i<snum.length() ; i++ ){ s += snum.charAt(i) - '0'; } return s; } }
得点は235.47/250、1回のsubmitでシステムテストクリア。Xの更新作業では、複数の候補から最小値を返すので、<=としないように注意。
0 件のコメント:
コメントを投稿