若某單位剩余員工人數(shù)為k,則分配方法為:在已建的小組中查找空位數(shù)(該小組還可容納的人數(shù))大于或等于k的小組,如果找到的小組有多個(gè),則選擇空位數(shù)最少的小組,將此k人分配到該小組中;如果沒(méi)有找到,則新建一個(gè)小組,將此k人分配到該小組中。
設(shè)n為5,m為20,各單位員工人數(shù)及單位內(nèi)部的分組過(guò)程如圖a所示,各單位剩余員工的分組過(guò)程如圖b所示。
編寫程序:給定各單位編號(hào)及員工人數(shù),根據(jù)上述方法進(jìn)行分組處理,按單位編號(hào)次序輸出各單位所分配的分組編號(hào)。請(qǐng)回答下列問(wèn)題:
def bubble_sort(lst):
n=len(lst)
for i in range(0, n-1):
return
調(diào)用該函數(shù),若 lst 為[[1,0],[2,0],[3,18],[4,0],[5,19],[6,17]],請(qǐng)回答①和②兩個(gè)問(wèn)題。
①虛線框中的程序段第 1 次執(zhí)行后,關(guān)于 lst 中的剩余員工人數(shù),下列說(shuō)法正確的是(單選,填字母)。
A.lst[0][1]數(shù)值最小 B.lst[0][1]數(shù)值最大
C.lst[5][1]數(shù)值最小 D.lst[5][1]數(shù)值最大
②虛線框中的程序段執(zhí)行的次數(shù)為。
函數(shù)與方法 | 功能 |
w.append(x) | 在列表 w 末尾添加元素 x |
x.w.pop() | 將列表 w 末尾元素賦值給 x,并將其從 w 中刪除 |
def group(data, m):
n=len(data)
a=[]
for i in range(n+1):
a.append([]) # a[i]初始化為空列表,存放編號(hào)為 i 的單位所分配的分組編號(hào)
gnum=0
for i in range(n): #各單位內(nèi)部分組
while data[i][1]>=m:
gnum+=1
k=data[i][0]
a[k].append(gnum)
bubble_sort(data) #根據(jù)每個(gè)單位的剩余員工人數(shù),對(duì) data 進(jìn)行降序排序
b=[]
for i in range(m):
b.append([])
i=0 #對(duì)剩余員工分組
while i<n and data[i][1]!=0:
while j<m and len(b[j])==0:
j+=1
if j<m:
v=b[j].pop()
else:
gnum+=1
v=gnum
a[data[i][0]].append(v)
i+=1
#輸出各單位的分組編號(hào),代碼略
'''
讀取小組人數(shù)上限存入 m;讀取 1 至 n 號(hào)單位的數(shù)據(jù),依次存入列表 data 的 data[0]至 data[n-1]中。
Data[i]包含 2 個(gè)數(shù)據(jù)項(xiàng),data[i][0],data[i][1]分別存放單位編號(hào)及員工人數(shù),代碼略
'''
group(lst, m)