TopCoderのアルゴリズムコンテストに参加しました。
このところずっと急激な右肩下がりでランクが落ちているので、
この辺で頑張らねば・・・
さて、今日の問題はこんな感じでした。。。
<TopCoder>
※アカウントをもっていない方のために、
DIVTの250点問題の概要を載せます。
(他にも500点、1000点問題やDIVUの問題アリ)
ルール@
まず2つの数字が与えられます。
1つ目が、元になる数字。2つ目が基準値。
ルールA
返却値は、基準値以上の数字で、
元になる数字にあるルールに従った数字を足したもの。
例1)与えられる数字が、1234 と 1000000 の場合
1234
+ 12340
+ 123400
+ 1234000
---------
1370974 ← 答え
例2)与えられる数字が、11 と 100 の場合
11
+ 110
-----
121 ← 答え
例3)与えられる数字が、20 と 10 の場合
20 ← 答え
ルールはお分かりでしょうか。。。
さて、私がこのコンテストのコーディング時間中に作成したのが、
これです:
public class ReverseMagicalSource {
public int find(int source, int A) {
int ans = 0;
if(source > A) {
return source;
} else {
ans = source;
for(int i = 1; ans <= A; i++) {
ans = ans + (int) (source * Math.pow(10, i));
}
}
return ans;
}
public static void main(String[] args) {
ReverseMagicalSource temp = new ReverseMagicalSource();
int[][] num = {
{19, 200},
{19, 18},
{333, 36963},
{1234, 1000000}
};
for(int[] i : num) {
int source = i[0];
int A = i[1];
System.out.println(temp.find(source, A));
}
}
}
※ find()の部分が今回求められていた実装箇所です。
しかし、challengeフェーズで他のソースを見ていた時に、
思わず衝撃と感動を覚えた実装方法が。。。
と、正解を出す前に、
皆さんならどういう実装をされますか?
続き...
【プログラムの最新記事】


