我在为该网站提出另一个挑战时遇到了这个问题。在这项挑战中,我使用“ Mario Kart 8 Scoring ”。玩家在第k位获得的积分数量由此1索引数组表示:[15,12,10,9,8,7,6,5,4,3,2,1]。因此,第一名获得15分,第二名获得12分,依此类推。
像这样分配点很容易,但是棘手的部分是如何处理领带的。我要做的是给每个并列玩家平均每个并列位置的得分。例如,如果只有第1名和第2名并列,则两个玩家都将获得(15 + 12)/ 2 = 13.5分。(注意:允许四舍五入到最接近的整数,因此13或14都可以接受。)然后,第3-12位获得其位置的正常点数。
挑战
给定12个非负整数分数,这些分数递减排序,输出每个玩家获得的积分数。您也可以将点列表[15,12,10,9,...]作为输入。请注意,每个玩家获得的积分数并不取决于分数的实际值,而是取决于它们与其他分数的比较方式。
测试用例
- [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14,10,9,8,7,6,5,4,3,2, 1]
- [20,15,15,15,10,9,8,7,6,5,4,3] => [15,10,10,10,8,7,6,5,4,3,2, 1]
- 说明:(12 + 10 + 9)/ 3 = 10.3333
- [1,1,1,1,1,1,1,1,1,1,1,1,1] => [ 7,7,7,7,7,7,7,7,7,7,7,7, 7 ]
- 说明:(15 + 12 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1)/ 12 = 6.8333
- [20,20,20,20,10,10,10,9,8,7,6,5] => [ 12,12,12,12,7,7,7,5,4,3,2, 1]
- 说明:(15 + 12 + 10 + 9)/ 4 = 11.5,(8 + 7 + 6)/ 3 = 7
- [100,99,98,95,95,95,94,93,93,92,91,91] => [15,12,10,8,8,8,6,5,5,3,2, 2 ]
- 说明:(9 + 8 + 7)/ 3 = 8,(5 + 4)/ 2 = 4.5,(2 + 1)/ 2 = 1.5