如何在python

时间:2017-04-06 17:50:35

标签: python algorithm

问题陈述是:

得分最高的玩家在排行榜上排名1。 具有相同分数的玩家获得相同的排名编号,并且下一个玩家接收紧随其后的排名编号。 例如,四名球员的得分分别为100,90,90,80和100。这些球员将分别获得1,2,3和3等级。

使用这种排名方法,需要根据玩家在进行时所做的分数来计算玩家的等级,将玩家分数作为输入提供('分数列表)。其次,一个特定的玩家' alice'提供分数,对于她玩的每个游戏,需要计算她在排行榜上的位置。

假设排行榜上有6位玩家,得分为[100,100,50,40,40,20,10]。爱丽丝玩她的第一个游戏,获得5分,她被排在列表的底部,排名为6.下一个游戏她得到25,现在她被排在第4级。接下来她得到50,在下一个游戏中,这个她的排名是2。

#!/bin/python3
import sys
n = int(input().strip())
scores = [int(scores_temp) for scores_temp in input().strip().split(' ')]
m = int(input().strip())
alice = [int(alice_temp) for alice_temp in input().strip().split(' ')]
# your code goes here
for _ in alice:
    scores.append(_)
    print(list(sorted(set(scores),reverse=True)).index(_)+1)

此代码适用于200~500范围内的输入。但如果它进入非常高的输入,如10 * 9,则代码因超时而终止。我想知道如何即兴创建此代码以使其更快地运行

修改

n = int(input().strip())
scores = sorted(set([int(scores_temp) for scores_temp in input().strip().split(' ')]),reverse=True)
m = int(input().strip())

alice=[int(alice_temp) for alice_temp in input().split(' ')]        
for a in alice:
    rank=1
    for _ in scores:
        if(a<_):
            rank=rank+1
        else:
            #print(rank)
            break
    print(rank)   

进行了此更改,但由于超时仍未达到终止&#39;,请建议需要修改的内容

1 个答案:

答案 0 :(得分:0)

没有必要将Alice的分数追加到[core] repositoryformatversion = 0 filemode = false logallrefupdates = true editor = /bin/vim.exe autocrlf = true whitespace = --get bare = false [remote "origin"] url = git@bitbucket.org:xxx/xxx.git fetch = +refs/heads/*:refs/remotes/origin/* [merge] edit = no [pull] edit = no [merge] edit = no [branch "branch_name"] remote = origin merge = refs/heads/branch_name 。首先确保scores从高到低排序。

然后,对于Alice的每个分数,按如下方式计算她的等级:

scores开始,遍历rank = 1列表。每次您查看的分数小于前一分数时,为scores添加1,并在您查看的分数等于或等时返回rank的值小于爱丽丝的得分。

修改

这个答案假设每个玩家的最高得分只是相关的。