一批选手参加比赛,比赛的规则是最后得分越高,名次越高。当半决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后的名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:选手序号:1,2,3,4,5,6,7选手得分:5,3,4,7,3,5,6。
下面直接上代码:
########################
def sortScore(psn, n):#应用冒泡排序法,排序后的数组psn按照score的值从大到小排列
for i in range(n-1):
for j in range(n-1-i):
if psn[j][1] < psn[j+1][1]:
#交换psn[j]与psn[j+1]
tmp = psn[j]
psn[j] = psn[j+1]
psn[j+1] = tmp
def setRand(psn, n):#指定每一位选手的名次
j = 1
psn[0][2] = 1 # 设定第一位选手的名次
for i in range(n): # 设定psn[2]~psn[n-1]的名次
if psn[i][1] != psn[i-1][1]:
psn[i][2] = j
j += 1
else:
psn[i][2] = psn[i-1][2]# psn[i]与psn[i-1]的名次相同
def sortNum(psn, n):#最后再按照选手的序号重新排序,以便能够按照选手的序号输出结果
for i in range(n-1):
for j in range(n-1-i):
if psn[j][0] > psn[j+1][0]: #交换psn[j]与psn[j+1]
tmp = psn[j]
psn[j] = psn[j+1]
psn[j+1] = tmp
def sortRand(psn, n):
sortScore(psn, n) #以分数为关键字排序
setRand(psn, n)#按照分数排名次
sortNum(psn, n) #按照序号重新排序
if __name__ == '__main__':
#选手的信息组成一个结构体数组
psn = [[1, 5, 0], [2, 3, 0], [3, 4, 0], [4, 7, 0], [5, 3, 0],\
[6, 5, 0],[7, 6, 0]]
sortRand(psn, 7)
print("序号 分数 名次 ")
#输出结果
for i in range(7):
print("%d%6d%6d" % (psn[i][0], psn[i][1], psn[i][2]))
########################
执行结果:
序号 分数 名次
1 5 3
2 3 5
3 4 4
4 7 1
5 3 5
6 5 3
7 6 2
________________END______________
网友评论