题目描述:

给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高三个分数之

和进行降序排名,输出降序排名后的选手id序列。

题目解析:

给一个数字表示射击的次数,然后给几个选手进行(乱序)射击,生成对应的成绩!

条件如下:

一个选手可以有多个射击成绩的分数,且次序不固定

如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手

如果选手的成绩之和相等,则相等的选手按照其id降序排列

输入描述:

输入第一行,一个整数N,表示该场比赛总共进行了N次射击,产生N个成绩分数(2<=N<=100)

输入第二行,一个长度为N整数序列,表示参与每次射击的选手id(0<=id<=99)

输入第三行,一个长度为N整数序列,表示参与每次射击选手对应的成绩(0<=成绩<=100)

输出描述:

符合题设条件的降序排名后的选手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

let idArr = [3,3,7,4,4,4,4,7,7,3,5,5,5]

let orderArr = [53,80,68,24,39,76,66,16,100,55,53,80,55]

let peopleArr = [...new Set(idArr)]

let result = {}

for(let i of peopleArr){

result[i] = []

}

for(let i=0;i

result[idArr[i]].push(orderArr[i])

}

let goldObj = []

Object.keys(result).map(e=>{

if(result[e].length<3){

delete result[e]

return

}

let arr = result[e].sort((a,b)=>b-a).splice(0,3)

let sum = 0

for(let i of arr){

sum+= i

}

goldObj.push({

name:e,

sum:sum

})

})

goldObj.sort((a,b)=> {

if(b.sum>a.sum){

return b.sum - a.sum

}else{

return b.name - a.name

}

})

let resultStr = ''

for(let i of goldObj){

resultStr+=i.name

}

console.log(resultStr);

Copyright © 2088 世界杯亚洲名额|世界杯对阵|工艺金属世界杯金属魅力站|craftitmetals.com All Rights Reserved.
友情链接