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