このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について、おおまかに説明する。
N1={1,2,...,1000}という配列が与えられる。ここから2の倍数番目に現れるものを取り除いた{1,3,5,...,999}をN2とする。さらにN2から3の倍数番目に現れる要素を取り除いた{1,3,7,9,13,...}をN3とする。このような操作を繰り返すとN10というものが生成できるが、このN10のn番目の要素の値を返せ。なお、N10の要素数は101になる。
私の解答はこちら。
import java.util.TreeSet;
public class EratosthenSieve2 {
public int nthElement(int n) {
TreeSet<Integer> work = new TreeSet();
Integer[] res = null;
for( int i=1 ; i<=1000; i++ ){
work.add(i);
}
for( int i=2 ; i<=10 ; i++ ){
res = (Integer[])work.toArray(new Integer[0]);
work.removeAll(work);
for( int j=0 ; j<res.length ; j++ ){
if( (j+1)%i != 0 ) work.add(res[j]);
}
}
res = (Integer[])work.toArray(new Integer[0]);
return res[n-1];
}
} 得点は128.10/250、中央値は約163点。return直前のresへの代入が抜けていて嵌ること約10分...

0 件のコメント:
コメントを投稿