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