今日の問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。
問題について軽く説明する。賭け事について考える。
ある賭け事で、賭ける側は予測される結果「0からamounts.length-1までの整数」に対し、それぞれamounts[]ドルを賭ける。最終的な当たりがfinalResultになったとすると、finalResult以外に賭けたお金は運営者の収益になる。一方、当たりに対しては、運営者が1ドルにつきcentePerDollar[]セント払うように設定してある。この賭けが終わった後に、運営者が儲けるのは何セントになるか求めるメソッドを作成せよ。
この問題を読んだときに、トトが真っ先に思い浮かんだ、私の最初の解答はこちら。
public class BettingMoney {
public int moneyMade(int[] amounts, int[] centsPerDollar, int finalResult) {
int comp = 0; // 運営の収益
int people = 0; // 賭けた人が当たりにした額
for( int i=0 ; i<amounts.length ; i++ ){
if( i != finalResult ){
comp += amounts[i];
}else{
people += amounts[i];
}
}
return comp*100-people*centsPerDollar[finalResult];
}
}得点は226.20/250。正解率は約97%!変数名を運営会社と賭ける人々という意味にしたけど、あまり良い変数名ではないですね。また、peopleは次のように変形すれば不要ということに気付きました。
public class BettingMoney {
public int moneyMade(int[] amounts, int[] centsPerDollar, int finalResult) {
int comp = 0;
for( int i=0 ; i<amounts.length ; i++ ){
if( i != finalResult ){
comp += amounts[i];
}
return comp*100-amounts[finalResult]*centsPerDollar[finalResult];
}
}

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