はまやんはまやんはまやん

hamayanhamayan's blog

ハーフパイプ(1) [yukicoder 394]

問題

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");
}