今天要來練習的是必較難的題目,是出自於APCS 105年3月5日的實作題1,那我們就開始吧!
問題描述
一次考試中,於所有及格學生中獲取最低分數者最為幸運,反之,於所有不及格同學 中,獲取最高分數者,可以說是最為不幸,而此二種分數,可以視為成績指標。 請你設計一支程式,讀入全班成績(人數不固定),請對所有分數進行排序,並分別找 出不及格中最高分數,以及及格中最低分數。當找不到最低及格分數,表示對於本次考試而言,這是一個不幸之班級,此時請你印 出:「worst case」;反之,當找不到最高不及格分數時,請你印出「best case」。
註:假設及格分數為 60,每筆測資皆為 0~100 間整數,且筆數未定。
輸入格式
第一行輸入學生人數,第二行為各學生分數(0~100 間),分數與分數之間以一個空白 間格。每一筆測資的學生人數為 1~20 的整數。
輸出格式
每筆測資輸出三行。
第一行由小而大印出所有成績,兩數字之間以一個空白間格,最後一個數字後無空白;
第二行印出最高不及格分數,如果全數及格時,於此行印出 best case;
第三行印出最低及格分數,當全數不及格時,於此行印出 worst case。
a=int(input()) #輸入人數
b=input() #輸入成績
list=b.split() #將成績轉為清單
list.sort() #將清單中成績排序(由小到大)
#以下為第一行=======================================
print(' '.join(list)) #將排序好的清單轉為字串並打印
#以下為第二行=======================================
list.reverse() #將清單順序反轉(由大到小)
for i in range(0,a):
if int(list[i])<60: #如果找到第一個小於60的數,打印並break
print(list[i])
break
if int(list[a-1])>=60: #如果清單中最小數>=60,就代表所有人及格
print('best case')
#以下為第三行=======================================
list.reverse() #將清單順序反轉(由小到大)
for j in range(0,a):
if int(list[j])>=60: #如果找到第一個大於60的數,打印並break
print(list[j])
break
if int(list[a-1])<60: #如果清單中最大數<60,就代表所有人都不及格
print('worst case')