组卷题库 > 高中信息技术试卷库
试题详情
小明所在的班级共有 20 名男生,要参加学校举办的拔河比赛,赛前根据体重分成 AB 两组进行训练,要求每组 10 人, 且每组男生的体重之和尽量接近。小明设计了如下算法:

①初步分组:将所有男生按体重从高到低排序,并以 ABAB…进行初步分组;

②计算体重差: 计算每组对应两个男生的体重差;

③交换学生:按体重差从高到低判断是否交换学生。

例如 20 名男生的体重(单位: kg)从高到低为:

95, 93, 93, 90, 90, 90, 84, 83, 83, 78, 77, 75, 74, 69, 64, 61, 61, 60, 56, 55。

步骤

体重

体重和

初步分组

A 组

95

93

90

84

83

77

74

64

61

56

777

B 组

93

90

90

83

78

75

69

61

60

55

754

体重差

2

3

0

1

5

2

5

3

1

1

23

交换学生

 

最终分组

A 组

95

93

90

83

78

77

69

64

61

56

766

B 组

93

90

90

84

83

75

74

61

60

55

765

小明按照以上算法编写Python程序如下,请在划线处填入合适的代码。

def group(student):    #初步分组

    a=[];b=[]

    i=0

    while i<len(student):

        a.append(student[i])

        b.append(student[i+1])

       

    return a,b

def cal_diff(a,b):     #计算体重差并降序排序

    d=[]

    for i in range(len(a)):

        d.append([i,a[i]-b[i]])

        for i in range(len(d)-1):

            for j in range(0,len(d)-i-1):

                if  :

                    d[j],d[j+1]=d[j+1],d[j]

        return d

def change(d,a,b):     #标记是否交换

    k=(sum(a)-sum(b))//2

    f=[0]*len(d)

    ssum=0

    for i in range(len(d)):

        ssum+=d[i][1]

        if ssum>k:

            ssum-=d[i][1]

        else:

           

            if ssum==k:

                break

    return f

student=[95, 93, 93, 90, 90, 90, 84, 83, 83, 78, 77, 75, 74, 69, 64, 61, 61, 60, 56, 55]

qA,qB=group(student)

print("初步分组后 A 组体重: ",qA,"和为:",sum(qA))

print("初步分组后 B 组体重: ",qB,"和为:",sum(qB))

diff=cal_diff(qA,qB)

flag=

for i in range(len(flag)):    #交换

    if flag[i]==1:

        qA[i],qB[i]=qB[i],qA[i]

print("交换后 A 组体重:",qA,"和为:",sum(qA))

print("交换后 B 组体重:",qB,"和为: ",sum(qB))

知识点
参考答案
采纳过本试题的试卷
教育网站链接