选手积分

提交数: 168, 通过率: 41.07%, 平均分: 42.74

题目描述:

学校举行投篮比赛,共有n名选手参加 (n为偶数,选手编号为1~n) ,比赛分r轮进行。 比赛积分规则为:每轮比赛中,两名选手为一组进行对阵,进球数多的选手获胜,获胜一方积分加1; 选手积分随着比赛轮次的进行而累加。

第一轮比赛按选手编号顺序,两人一组进行比赛,即1号与2号一组,3号与4号一组,以此类推。每轮比赛结束后,按照选手已获积分从高到低进行排名,若积分相同,则编号较小的选手排名靠前。此后每轮比赛均按选手排名进行分组,如第1名和第2名一组、第3名和第4名一组,以此类推。

编写程序,读取每轮比赛选手的进球数,统计各轮比赛后选手的积分。

若现有4名选手进行比赛, 初始积分均为0,过程如下图所示。

1708736903882603479.png

输入格式:

4 4
8 9 9 17
5 15 9 11
7 19 12 6
8 20 14 16

输出格式:

[[2, 1], [4, 1], [1, 0], [3, 0]]
[[4, 2], [2, 1], [3, 1], [1, 0]]
[[2, 2], [3, 2], [4, 2], [1, 0]]
[[3, 3], [2, 2], [4, 2], [1, 1]]

提示:

请完善下列程序:

def merge(a,b):
    n=len(a); m=len(b)
    c=[-1]*(n+m)
    i,j=0,0
    for k in range(n+ m):
        if i<n and j<m:
            if _______________________ :  #填空1
                c[k]=a[i]
                i=i+1
            else :
                c[k]=b[j]
                j=j+1
        elif ______________ :      #填空2
            c[k]=a[i]
            i=i+1
        else:
            c[k]=b[j]
            j=j+1
    return c
d=[]
#输入选手人数n和比赛轮数r
n,r = map(int, input().split())
for i in range(n):
    d.append([i +1,0])#为 d 追加一个元素[i+1,0]
for i in range(r):
    # 读取本轮比赛各组选手的进球数, 存入列表 score[0]~score[n-1]
    #score[0]和 score[1]存储第一组两名选手的进球数……
    score=list(map(int,input().split()))
    d1 =[];d2 =[]
    for j in range(_____________): #填空3
        if score[j]> score[j+1]:
            ________________  #填空4 
            d1. append(d[j])
            d2. append(d[j+1])
        else:
            d[j+1][1]=d[j+1][1]+1
            d1. append(d[j+ 1])
            d2. append(d[j])
    d= ______________ #填空5    
    #输出本轮各选手的积分,代码略
    print(d)
时间限制: 1000ms
空间限制: 256MB

来源: 2024.1台州高二期末卷