①当天08:00之前完成签到的患者,按照挂号顺序从小到大排队就诊;
②08:00之后签到的患者,按照挂号的序号从小到大的次序插入候诊队伍中;
③队伍中前3名患者(包括正在就诊患者)视为已进入待诊状态,插队的患者只能插到这3 名待诊患者后的队伍中。
假设医生从08:00开始叫号就诊,对每位患者的诊断时间均为3分钟,忽略相邻患者就 诊的时间间隔。编写程序实现以下功能:若有患者签到,则根据规则更新候诊队伍;医生每 完成一名患者的诊断,电子屏幕上按顺序显示待诊的患者姓名和每个患者预计就诊的时间。
姓名 | 挂号序号 | 签到时间 |
A | 3 | 07:47:03 |
B | 1 | 07:51:12 |
C | 6 | 07:55:32 |
D | 4 | 07:57:10 |
E | 8 | 07:59:52 |
F | 2 | 08:02:07 |
则患者 F的预计就诊时间为 (格式如08:07:20)。
def init(lst): #构建8点前签到的候诊队伍
i=0;n=len(lst)
while i<n-1:
k=i;i=n-1
for j in range(n-1,k,-1):
if lst[i][1]<lst[j-1][1]:
lst[j],Ist[j-1]=Ist[j-1],Ist[j]
____▲____
for i in range(n):
lst[i][2]=180*i
lst[i].append(i+1)
lst[n-1][3]=-1
#修改时间格式,每位患者诊断时间为3分钟
#尾结点指针域处理,如[’E’,8,720,-1]
程序划线处的代码是 (单选,填字母)
def gs(t):# 时间格式转换,将时间戳127转成“08:02:07”形式
t=t+8*60*60
h=t//3600
m=
s=t%60
time='%02d'%h+:'+'%02d%m+:+'%02d'%s
return time
def mov(lst,head):
#更新队伍并输出,代码略
return head
def te(time): #时间格式转换,将“08:02:07”转换成以秒为单位的时间戳127
t=int(time[0:2])*60*60+int(time[3:5])*60+int(time[6:])
t=t-8*60*60 #8 点开始叫号看诊
return t
def insnew(lst,head,data); #将新签到的患者插入候诊队伍中,并更新每个患者预计就诊的时间
data[2]=tc(data[2])
data.append(-1)
p=head;q=p;k=0
if head=-1:# 无人排队
lst.append(data)
else:
while q!=-1 and():
k=k+1
p=q
q=lst[q][3]
data[2]=lst[p][2]+180
data[3]=q
lst.append(data)
lst[p][3]=len(lst)-]
p=len(lst)-1
while q!=-1:
lst[q][2]=1st[p][2]+180
p=q
q=lst[q][3]
return head