AOJ-ICPC 1147
ICPC Score Totalizer Software | Aizu Online Judge
先に進みつつも復習もしましょうね〜ということで一番最初の問題。
最大値と最小値を除いたスコアの平均値を計算しよう、ってことですね(最初読んだ時英語を理解するのに苦労したのは秘密)
これぐらい余裕じゃと思って最初に書いたコードがこちら。
int main() { int n; while(1){ cin >> n; if(n == 0) break; int max = -1, min = 10000, sum = 0, score = 0, ans = 0; for(int i = 0; i < n; i++){ cin >> score; sum += score; if(score > max) max = score; else if(score < min) min = score; } sum -= max + min; ans = sum / (n - 2); cout << ans << endl; } return 0; }
ぱぱっと提出してみたところ…wrong answer。
こんな問題も一発で通せないのかよ〜〜〜と思って見直してみる。
とりあえずtestcaseをターミナルで試してみたところ、以下の場合に引っかかった。
3 321 638 974 -41 // 答え
よくわからなかったので一回ごとに最大値、最小値を表示させるようにした。
実行したものがこちら。
3 321 321 10000 638 638 10000
minの値がうまく変わっていなかったことが判明。
どうやらelseをつけてしまったのがまずかったみたい。
確かに、elseをつけてしまったら入力された値が最大値でありかつ最小値である場合がわからなくなるもんなあ。
というわけでelseだけ取り除いたらうまく行った。
int main() { int n; while(1){ cin >> n; if(n == 0) break; int max = -1, min = 10000, sum = 0, score = 0, ans = 0; for(int i = 0; i < n; i++){ cin >> score; sum += score; if(score > max) max = score; if(score < min) min = score; } sum -= max + min; ans = sum / (n - 2); cout << ans << endl; } return 0; }
ifとelse if、気をつけないといけないなあ。