n个人打乒乓球,好不热闹。已知每人各自胜了几局,请按胜局从多到少排序并输出每个人的排名rank(从1开始)、胜局数num及该人原来的输入序号index(从1开始),若num相同,则rank也相同,但输出时index小者优先输出。
时间: 2024-03-23 07:37:25 浏览: 14
好的,这是一个经典的排序问题,可以使用快速排序算法来解决。下面是一个示例代码,可以满足你的需求:
```python
class Player:
def __init__(self, index, num):
self.index = index
self.num = num
self.rank = 0
def quick_sort(players, left, right):
if left >= right:
return
pivot = players[left]
i, j = left, right
while i < j:
while i < j and (players[j].num, -players[j].index) <= (pivot.num, -pivot.index):
j -= 1
players[i] = players[j]
while i < j and (players[i].num, -players[i].index) >= (pivot.num, -pivot.index):
i += 1
players[j] = players[i]
players[i] = pivot
quick_sort(players, left, i - 1)
quick_sort(players, i + 1, right)
n = int(input())
players = []
for i in range(n):
num = int(input())
players.append(Player(i + 1, num))
quick_sort(players, 0, n - 1)
rank, num = 1, players[0].num
for i in range(n):
if players[i].num < num:
rank, num = i + 1, players[i].num
players[i].rank = rank
print(players[i].rank, players[i].num, players[i].index)
```
在这个代码中,我们定义了一个Player类来保存每个人的信息。我们使用快速排序算法对所有人按照胜局数从多到少进行排序,并为每个人分配排名。注意,如果胜局数相同,我们按照输入序号从小到大的顺序分配排名。
最后,我们按照要求输出每个人的排名、胜局数和输入序号。