このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
A[]という整数型の配列が与えられる。Aは等差数列か等比数列のどちらかである。Aがどちらであるかを判定し、Aの最後の要素に続く要素を返すメソッドを作成せよ。なお、Aはどちらかであるか判別可能であり、解答は32bit型の符号付き整数の範囲に収まることが保証されている。
私の解答はこちら。
public class GuessingNextElement { public int guess(int[] A) { if( A[1] - A[0] == A[2] - A[1] ){ // 問題文ではAが3つ以上の要素を持つことを保証している return A[A.length-1] + (A[1] - A[0]); // Aが等差数列である場合 }else{ int ratio = A[1] / A[0]; // Aが等比数列である場合 return A[A.length-1] * ratio; } } }
得点は207.77/250、2回目のsubmitでシステムテストクリア。if文の中身を割り算でやると割り切れないケースで失敗するので、等差数列かそうでないかで判定する方が間違いが出にくいですね。1回目の提出はシステムテストで見事に弾かれました。中央値は約230点。
0 件のコメント:
コメントを投稿