①当天08:00之前完成签到的患者,按照挂号顺序从小到大排队就诊;
②08:00之后签到的患者,按照挂号的序号从小到大的次序插入候诊队伍中;
③队伍中前3名患者(包括正在就诊患者)视为已进入待诊状态,插队的患者只能插到这3名待诊患者后的队伍中。
假设医生从08:00开始叫号就诊,对每位患者的诊断时间均为3分钟,忽略相邻患者就诊的时间间隔。编写程序实现以下功能:若有患者签到,则根据规则更新候诊队伍;医生每完成一名患者的诊断,电子屏幕上按顺序显示待诊的患者姓名和每个患者预计就诊的时间。
(1)若当前已签到患者信息如下表所示:
姓名 | 挂号序号 | 签到时间 |
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 |
(2)08:00:00之前签到的患者原始数据存在列表lst中,每位患者信息包括姓名、挂号序号、签到时间,以下函数将列表中的数据按挂号序号从小到大排序,并构建候诊队伍。
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[j][1]< lst[j-1][1]:
lst[j],lst[j-1]=lst[j-1],lst[j]
for i in range(n):
lst[i][2]=180*i#修改时间格式,每位患者诊断时间为3分钟
lst[i].append(i+1)
lst[n-1][3]=-1#尾结点指针域处理,如['E',8,720,-1]
程序划线处的代码是
A.i=i+1 B.i=j+1 C.i=k-1 D.i=j
(3)每当一位患者就诊结束,更新队伍并按就诊顺序输出待诊的患者姓名和每个患者预计就诊的时间。请补充程序划线处。
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
(4)若有患者签到,则更新候诊队伍。请补充程序划线处。
def tc(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)-1
p=len(lst)-1
while q!=-1:
lst[q][2]=lst[p][2]+180
p=q
q=lst[q][3]
return head

同类型试题

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

