題目來源: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;
}