題目描述
給定一個射擊比賽成績單,包含多個選手若干次射擊的成績分數,請對每個選手按其最高3個分數之和進行降序排名,輸出降序排
名后的選手ID序列
條件如下:
1.一個選手可以有多個射擊成績的分數,且次序不固定
2.如果一個選手成績少于3個,則認為選手的所有成績無效,排名忽略該選手
3.如果選手的成績之和相等,則成績之和相等的選手按照其ID降序排列
輸入輸出
輸入
第一行:一個整數N,表示該場比賽總共進行了N次射擊,產生N個成績分數(2<=N<=100)
第二行:一個長度為N整數序列,表示參與每次射擊的選手D(0<=ID<=99)
第三行:一個長度為N整數序列,表示參與每次射擊的選手對應的成績(0<=成績<=100)
輸出
符合題設條件的降序排名后的選手ID序列
樣例1:
輸入
13
3,3,7,4,4,4,4,7,7,3,5,5,5
53,80,68,24,39,76,66,16,100,55,53,80,55
輸出
5,3,7,4
說明:
該場射擊比賽進行了13次,參賽的選手為3,4,5,7
● 3號選手成績: 53,80,55, 最高3個成績的和為: 80+55+53=188
● 4號選手成績: 24,39,76,66, 最高3個成績的和為: 76+66+39=181
● 5號選手成績: 53,80,55, 最高3個成績的和為: 80+55+53=188
● 7號選手成績: 68,16,100,最高3個成績的和為: 100+68+16=184
比較各個選手最高3個成績的和,有3號=5號>7號>4號,由于3號和5號成績相等且1D號5>3,所以輸出為: 5,3,7,4
樣例2
輸入
15
1,1,1,2,2,2,3,4,3,3,5,5,3,3,5
80,90,70,85,95,75,100,65,90,80,75,95,70,80,90
輸出
3,5,2,1
??C++ 題目理解與思路
1、定義選手結構體 Player
- 結構體成員變量:
- int id;: 選手的ID。
- int total;: 選手的最高三個成績的總和。
- 構造函數:不需要顯式的構造函數,因為結構體成員變量可以直接初始化。
- 成員函數 calculateSumTopThree:沒有顯式定義,但在代碼中通過排序和求和的方式實現了該功能。
2、自定義排序比較函數 compare
- 用于比較兩個選手的最高三個成績之和。
- 比較規則:
- 如果兩個選手的總分不同,則總分高的選手排在前面。
- 如果兩個選手的總分相同,則ID大的選手排在前面。
3、輔助函數 splitStringToInt
- 將輸入的逗號分隔的字符串轉換為整數數組。
- 實現步驟:
- 遍歷字符串中的每個字符。
- 如果遇到逗號 ,,則將臨時字符串 temp 轉換為整數并添加到結果數組 result 中,然后清空 temp。
- 如果遇到其他字符,則將其拼接到 temp 中。
- 處理最后一個數字,將 temp 轉換為整數并添加到結果數組 result 中。
4、主函數邏輯
-
讀取射擊次數 N:
- 使用 cin >> N; 讀取射擊次數。
- 使用 cin.ignore(); 忽略換行符,防止影響后續輸入。
-
讀取選手ID序列:
- 使用 getline(cin, ids_str); 讀取選手ID序列。
- 使用 splitStringToInt(ids_str) 將ID序列轉換為整數數組 ids。
-
讀取分數序列:
- 使用 getline(cin, scores_str); 讀取分數序列。
- 使用 splitStringToInt(scores_str) 將分數序列轉換為整數數組 scores
-
記錄每個選手的成績:
- 使用 unordered_map<int, vector> id_to_scores 哈希表
- 記錄每個選手的所有成績。
- 遍歷 ids 和 scores 數組,將每個成績添加到對應ID的列表中。
-
計算每個選手的最高三個成績之和:
- 創建一個 vector players 數組來存儲每個選手的有效信息。
- 遍歷 id_to_scores 哈希表,對每個選手進行如下操作:
- 如果該選手的成績數量少于3個,則忽略該選手。
- 如果該選手的成績數量大于等于3個,則對其進行降序排序,并計算最高三個成績的總和。
- 將選手ID和總分存儲到 players 數組中。
-
排序選手:
- 使用 sort(players.begin(), players.end(), compare); 按照總分降序排列選手,總分相同時按照ID降序排列。
-
輸出結果:
- 遍歷 players 數組,輸出選手ID,用逗號分隔。
- 使用 bool first = true; 來控制輸出格式,確保第一個ID前沒有逗號。
? C++ 函數OJ版
#include <iostream>
#include <vector>
#include