ZeroJudge G307: 為了好吃的蘋果派 (Apple Pie)

為了做出最好吃的蘋果派,需要做出些努力。

現在有 N 個蘋果派(編號 0, 1, …, N-1)需要通過品管測驗,每個蘋果派分別會有 K 個人試吃評分。

為了避免偏頗值,每個蘋果派皆會將 K 個評分中最高分和最低分捨去,也就是只剩下剩餘 K-2 個成績。

只有當這 K-2 個成績的平均值大於或等於 T 值時,我們才認為他是個及格的蘋果派。

請協助撰寫程式,完成蘋果派的品管測驗。

範例測資

範例輸入範例輸出
第一行有三個正整數 N, K, T ( 3 ≤ N, K, T ≤ 1000 )
代表總共有 N 個蘋果派,每個蘋果派各會有 K 個人評分
以及去掉最高、最低分後的平均需大於等於的及格門檻 T 值
接下來依序有 N 行,每行有 K 個正整數 xi ( 1 ≤ xi ≤ 1000 )
代表該蘋果派被評的分數,其中同個蘋果派的評分不會重複
即對於同個蘋果派保證所有 xi ≠ xj
對於及格的蘋果派,編號小至大依序印出 (初始編號為 0),兩兩間需換行
若不存在及格的蘋果派,則請印出 「A is for apple.」
7 4 40
1 2 4 8
8 5 2 3
3 4 1 8
7 6 1 5
1 8 4 7
3 2 8 6
1 3 2 7
A is for apple.
9 7 10
9 15 13 2 6 3 12
12 14 4 5 3 7 19
10 8 4 14 6 18 19
11 17 1 19 4 6 3
8 13 14 16 12 3 17
4 9 8 3 19 17 7
19 2 12 4 1 15 8
11 16 4 12 1 5 19
1 11 9 6 4 19 15
2
4
ZeroJudge G307 範例測資

解題思路

在收資料的時候一邊判斷最大值與最小值,並且計算所有成績的總和。之後將總和 -= 最大值跟最小值,並且計算平均值,這邊可以使用 float/double 來計算平均值。

可以設定一個布林值 ok 預設為 false,如果有合格的蘋果派則將 ok 設為 true。在所有迴圈結束之後,如果 ok 依舊為 false,則輸出「A is for apple.」。

範例程式碼-ZeroJudge G307: 為了好吃的蘋果派 (Apple Pie)

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N, K, T;
    cin >> N >> K >> T;
    bool ok = false;
    for (int i = 0; i<N; i++) {
        int max = -999, min = 99999, sum = 0;
        for (int j = 0; j<K; j++) {
            int tmp;
            cin >> tmp;
            sum += tmp;
            if (tmp > max) max = tmp;
            if (tmp < min) min = tmp;
        }
        sum -= max;
        sum -= min;
        const double average = double(sum)/(K-2);
        if (average >= T) {
            cout << i << "\n";
            ok = true;
        }
    }
    if (!ok) cout << "A is for apple.\n";
}

//ZeroJudge G307
//Dr. SeanXD

發佈留言