当前位置: 高中信息技术 / 综合题
  • 1. (2022·浙江模拟) 小明所在的班级共有 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))

微信扫码预览、分享更方便