このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について説明する。
2007年の1月にお菓子屋さんが飴を製造した。毎月の最後の日に、お母さんは子供にいくつか飴を食べることを許している。飴の寿命は1/1から飴が食べられるまでの日数である。例えば、1/31に食べられた飴の寿命は31日、12/31に食べられた飴の寿命は365日である(うるう年でないことに注意!)。eatenCandies[]という2007年の各月の最後に食べられた飴の数が与えられたとき(配列の添字0は1月、添字1は2月を表す。以下同様)、飴の平均寿命を計算して返すメソッドを作成せよ。
私の解答はこちら。
public class AverageCandyLifetime {
public double getAverage(int[] eatenCandies) {
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 各月の日数
int sum = 0;
int lifetimes = 0;
int nCandies = 0;
for( int i=0 ; i<eatenCandies.length ; i++ ){
lifetimes += days[i];
nCandies += eatenCandies[i];
sum += eatenCandies[i] * lifetimes;
}
return (double)sum/nCandies;
}
}
得点は244.91/250、1回のsubmitでシステムテストクリア。中央値は約215点。

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