問題
http://yukicoder.me/problems/no/394
要素数6の数列 S1~S6 が与えられる。
この数列の最大と最小を(複数あっても)1つずつ除外する。
残った4つの平均を小数点第二位まで正確に出力せよ。
0 <= Si ,= 100
解法
1. 計算するだけ
2. 正確に出力するということなので、整数計算に収まるようにする
3. 最大最小を抜かした4つの和をsumとする
4. 答えは sum / 4 を答えればいいが、小数になる
5. 予め100倍して4で割る( sum * 100 / 4 = sum * 25 )と整数に計算結果が収まる
6. この結果を1/100して出力する or 文字列に直して少数点をつける(俺の解答はこっち)と答え
実装
http://yukicoder.me/submissions/103779
int S[6]; //----------------------------------------------------------------- int main() { rep(i, 0, 6) cin >> S[i]; sort(S, S + 6); int sum = 0; rep(i, 1, 5) sum += S[i]; sum *= 100; sum /= 4; if (sum == 0) { printf("0.00\n"); return 0; } else if (sum < 100) { printf("0."); string ans = to_string(sum); if (ans.length() == 1) ans = "0" + ans; cout << ans << endl; return 0; } string ans = to_string(sum); rep(i, 0, ans.length()) { if(i == ans.length() - 2) printf(".%c", ans[i]); else printf("%c", ans[i]); } printf("\n"); }