客户 编号 | 到达 时间 | 办理业务所 需时长 (分) | 客户 等级 | ||||
1 | 07:53 | 8 | 0 | ||||
2 | 07:54 | 6 | 0 | ||||
3 | 07:57 | 7 | 0 | ||||
4 | 08:02 | 8 | 1 | ||||
5 | 08:12 | 10 | 1 | ||||
. | . | . | . |
图 a

图b
从文件中读取当天客户信息,根据上述规则,按办理业务顺序输出办理结果,如图 b 所示。
(1) 以图 a 为例,若只开 1 个窗口,第 4 个办理业务的客户编号为
(2) 实现上述功能的 Python 程序段如下,请在划线处填入合适的代码。
'''从文件中读取客户信息存入 data 中 (到达时间已转换为分钟,如 07:53 转换为 473) ,其 中 data[0]存储第 1 个客户信息,data[0][0] 、data[0][1] 、data[0][2] 、data[0][3]为分别表示第 1 个客户的客户编号、到达时间、办理业务所需时长 (分) 和客户等级,代码略。'''
def mt(x) :
#将分钟转换为时间格式,如 473 转换为 07:53,代码略
def gs(x):
#格式化输出,代码略
t=[[9999,9999],[9999,9999]]#t[0]代表第一个窗口的开始时间和结束时间,t[1]代表第二个窗
口的开始时间和结束时间
m=int(input("请输入 m 的值:"))
n=len(data)
t[0][0]=data[0][1]
t[0][1]=data[0][1]+data[0][2]
print("办理序号","客户编号","开始时间","结束时间","窗口编号")
print(gs(1),gs(data[0][0]),gs(mt(t[0][0])),gs(mt(t[0][1])),gs(0))
full=False #full 为 True 表示 2 个窗口办理业务
waitnum=0
openwin=False #openwin 为 True 表示增开 1 个窗口
i=1;q=1;head=1;tail=1 #第一个人已经在办理业务, 队伍为空
while ①
while i < n and data [i][1] < min(t[0][1],t[1][1]):
tail+=1
waitnum+=1
tmp=data[tail-1]
j=tail-2
while ②
data [j+1]=data [j]
j-= 1
data[j+1]=tmp
i+=1
if waitnum==m and not full:
full=True
openwin=True
break
x=0 #办理业务的窗口编号
if openwin or full and t[1][1] < t[0][1]:
x= 1
if openwin==True: #新开一个窗口
t[x][1]= ③
openwin=False
if waitnum>0:
t[x][0]=t[x][1]
t[x][1]=t[x][1]+data[head][2]
waitnum-= 1
q+=1
print(gs(q),gs(data[head][0]),gs(mt(t[x][0])),gs(mt(t[x][1])),gs(x))
④
else:
t[x][0]=data[i][1]
t[x][1]=data[i][1]+data[i][2]
q+=1
print(gs(q),gs(data[i][0]),gs(mt(t[x][0])),gs(mt(t[x][1])),gs(x))
i+=1
head=tail=i

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

