2020年6月28日 星期日

APCS(2016/03/05) b964: 第 1 題 成績指標

題目來源:https://zerojudge.tw/ShowProblem?problemid=b964
一次考試中,於所有及格學生中獲取最低分數者最為幸運,反之,於所有不及格同學中,獲取最高分數者,可以說是最為不幸,而此二種分數,可以視為成績指標。
請你設計一支程式,讀入全班成績(人數不固定),請對所有分數進行排序,並分別找出不及格中最高分數,以及及格中最低分數。

當找不到最低及格分數,表示對於本次考試而言,這是一個不幸之班級,此時請你印出「worst case」;反之,當找不到最高不及格分數時,請你印出「best case」。

( 註:假設及格分數為 60 )。
輸入說明
第一行輸入學生人數,第二行為各學生分數(0~100 間),分數與分數之間以一個空白間格。
每一筆測資的學生人數為 1~20 的整數。


輸出說明
每筆測資輸出三行。

第一行由小而大印出所有成績,兩數字之間以一個空白間格,最後一個數字後無空白;
第二行印出最高不及格分數,如果全數及格時,於此行印出 best case
第三行印出最低及格分數,如果全數不及格時,於此行印出 worst case

範例輸入 #1                                範例輸出 #1
10                                                0 11 22 33 44 55 66 77 88 99
0 11 22 33 55 66 77 99 88 44     55
                                                    66



範例輸入 #2                                範例輸出 #2
1                                                    13
13                                                  13
                                                      worst case

範例輸入 #3                                範例輸出 #3
2                                                    65 73
73 65                                             best case
                                                      65

解題心得:
跟一般單純求最大值的條件有點不同,這題是求大數字中的最小值與小數字中的最大值,把條件式釐清楚,相信這題是可以把握的分數。

以下附上程式碼,如果有問題請在下方留言或是EMAIL給我囉。
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
    cin.tie(0) , cin.sync_with_stdio(false);
    int n , m , i;
    vector<int> v;
    while(cin >> n) {
        v.clear();
        int maxs = 101,mins = -101;
        while(n-- > 0) {
            cin >> m;
            for(i = 0; i < v.size(); i++) {
                if(v[i] > m) {
                    break;
                }
            }
            v.insert(v.begin() + i , m);
            if(m < 60) {
                mins = max(mins , m);
            } else if(m >= 60) {
                maxs = min(maxs , m);
            }
        }
        for(i = 0; i < v.size(); i++) {
            cout << v[i] << " ";
        }
        cout << '\n';
        if(mins == -101) {
            cout << "best case\n";
        } else {
            cout << mins << '\n';
        }
        if(maxs == 101) {
            cout << "worst case\n";
        } else {
            cout << maxs <<'\n';
        }
    }

    return 0;
}

沒有留言:

張貼留言

o079. 4. 最佳選擇

 題目描述: 給一個長度為 n 的正整數序列 a1,a2...an ,你可以執行多次操作 (包含 0 次),每次操作只能選擇這個序列的第一個或最後一個數字,再將這個數字從序列中刪除並自己搜集起來。 求滿足總和不超過 k 且搜集的數字奇數和偶數個數相同的條件下,所能搜集的數字總和最...