このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
平面にsideLengthの長さを持つ正方形を描く、次に円を内接するように描く。その縁の中に内接するように正方形を描く。これを平面にK個の円が現れるまで手続きを繰り返す。各円について他の図に重ならない面積を求め、その面積の合計を返せ。
私の解答はこちら。
public class RecursiveFigures {
public double getArea(int sideLength, int K) {
double area = sideLength * sideLength; // 全体の面積
double currentSideLen = sideLength; // 注目する正方形の辺の長さ
for( int i=0 ; i<K ; i++ ){
area -= currentSideLen * currentSideLen; // 正方形の面積を引き
area += (currentSideLen/2)*(currentSideLen/2) * Math.PI; // 次の円の面積を足す
currentSideLen = currentSideLen/Math.sqrt(2); // 次の正方形の辺は現時点から1/sqrt(2)倍
}
return area;
}
}
得点は236.29/250、1回のsubmitでシステムテストクリア。ちょっと手順の構成につまりました。もっと単純にできるかもしれないですね。
0 件のコメント:
コメントを投稿