#40372: C++詳解-Pair排序


toseanlin@gmail.com (Dr. SeanXD)

學校 : 康橋雙語學校
編號 : 158065
來源 : [24.147.249.5]
最後登入時間 :
2024-11-30 22:22:32
h075. 成績排名 | From: [220.130.163.227] | 發表日期 : 2024-05-15 10:54

使用整數來收座號和三個成績,然後計算加權的平均。算法是「[(資訊*5) + (數學*3) + (英文*2)] / (5 + 3 + 2)」計算平均的時候需要計算成浮點數,記得要將成績先轉型再計算。

宣告一個 Vector<Vector<float>>,使用二維陣列來做排序,每一個人就是一個 Vector<float>。在收到資料之後將以下的資料依序 Push_Back 到 Vector<float> 中:加權平均 (浮點數)、資訊成績 (整數)、數學成績 (整數)、英文成績 (整數)、座號*-1。

將二維陣列排序之後要從最右邊輸出到最左邊,但是如果有全部同分的情況,座號比較大的就會排在較右邊,如果存資料的時候將座號*-1,這樣子比較小的座號就會排到比較右邊

再來要使用一個 If 判斷是,判斷加權平均時是否可以整除,如果可以整除的話,拿剛剛計算的浮點數轉換成字串的型態。並且使用 For迴圈 將小數點之前 (不包含小數點) 的字元都加到一個新的字串。使用 Map<Vector<float>, string>,Key 就是代表目前這個人的 Vector<float>,Value 就是剛剛相加完的字串,要用來輸出。

Else 的話就代表沒有辦法整除,就做跟 If 相同的事情,只是這一次要將字串加到小數點後一位的字元 (不需要四捨五入)。

輸出的時候要記得將座號再乘以 -1,平均值的話就是使用 Map[stu[i]] 來輸出剛剛相加好的字串就可以了。

 

範例程式碼

 
ZeroJudge Forum