题目描述:
给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高三个分数之
和进行降序排名,输出降序排名后的选手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<idArr.length;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);