目录
给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。
符合题设条件的降序排名后的选手ID序列。
输入
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号成绩相等且ID号5>3, 所以输出为:5,3,7,4
- /* JavaScript Node ACM模式 控制台输入获取 */
- const readline = require("readline");
-
- const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
- });
-
- const lines = [];
- rl.on("line", (line) => {
- lines.push(line);
- if (lines.length === 3) {
- sort(lines);
- lines.length = 0;
- }
- });
-
- /* 射击成绩排序-基于对象 */
- function sort(lines) {
- // 第一行输入:射击次数,13
- const count = parseInt(lines[0]);
- // 第二行输入:选手id,3,3,7,4,4,4,4,7,7,3,5,5,5
- const ids = lines[1].split(",");
- // 第三行输入:选手分数,53,80,68,24,39,76,66,16,100,55,53,80,55
- const scores = lines[2].split(",");
-
- // 将score归类到对应id中
- const obj = {};
- for (let i = 0; i < count; i++) {
- let key = ids[i];
- let val = scores[i];
-
- if (!obj[key]) {
- obj[key] = [];
- }
- obj[key].push(val);
- }
- /*
- {
- '3': [ '53', '80', '55' ],
- '4': [ '24', '39', '76', '66' ],
- '5': [ '53', '80', '55' ],
- '7': [ '68', '16', '100' ]
- }
- */
-
- const sorts = [];
- for (const key in obj) {
- // 忽略成绩少于3个的选手
- if (obj[key].length < 3) {
- delete obj[key];
- }
-
- // 只保留最高的三次成绩
- obj[key].sort((a, b) => {
- return b - a;
- });
-
- obj[key].length = 3;
- /*
- {
- '3': [ '53', '80', '55' ],
- '4': [ '39', '76', '66' ],
- '5': [ '53', '80', '55' ],
- '7': [ '68', '16', '100' ]
- }
- */
-
- // 对最高的三次成绩求和
- obj[key] = obj[key].reduce((pre, cur) => {
- return parseInt(pre) + parseInt(cur);
- });
- /*
- {
- '3': 188,
- '4': 181,
- '5': 188,
- '7': 184
- }
- */
-
- // 由于对象属性无法进行条件排序,所以我们需要将id:score存到数组中
- sorts.push({ id: key, score: obj[key] });
- /*
- [{id:'3', score:188}, {id:'4', score:181}, {id:'5', score:188}, {id:'7', score:184 }]
- */
- }
-
- console.log(
- sorts
- .sort((s1, s2) => {
- return s2.score - s1.score
- ? s2.score - s1.score
- : s2.id - s1.id
- ? s2.id - s1.id
- : 0;
- })
- .map((item) => item.id)
- .join(",")
- );
- }