①初步分组:将所有男生按体重从高到低排序,并以 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))