①當(dāng)天08:00之前完成簽到的患者,按照掛號(hào)順序從小到大排隊(duì)就診;
②08:00之后簽到的患者,按照掛號(hào)的序號(hào)從小到大的次序插入候診隊(duì)伍中;
③隊(duì)伍中前3名患者(包括正在就診患者)視為已進(jìn)入待診狀態(tài),插隊(duì)的患者只能插到這3 名待診患者后的隊(duì)伍中。
假設(shè)醫(yī)生從08:00開(kāi)始叫號(hào)就診,對(duì)每位患者的診斷時(shí)間均為3分鐘,忽略相鄰患者就 診的時(shí)間間隔。編寫(xiě)程序?qū)崿F(xiàn)以下功能:若有患者簽到,則根據(jù)規(guī)則更新候診隊(duì)伍;醫(yī)生每 完成一名患者的診斷,電子屏幕上按順序顯示待診的患者姓名和每個(gè)患者預(yù)計(jì)就診的時(shí)間。
姓名 | 掛號(hào)序號(hào) | 簽到時(shí)間 |
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的預(yù)計(jì)就診時(shí)間為 (格式如08:07:20)。
def init(lst): #構(gòu)建8點(diǎn)前簽到的候診隊(duì)伍
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
#修改時(shí)間格式,每位患者診斷時(shí)間為3分鐘
#尾結(jié)點(diǎn)指針域處理,如[’E’,8,720,-1]
程序劃線處的代碼是 (單選,填字母)
def gs(t):# 時(shí)間格式轉(zhuǎn)換,將時(shí)間戳127轉(zhuǎn)成“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):
#更新隊(duì)伍并輸出,代碼略
return head
def te(time): #時(shí)間格式轉(zhuǎn)換,將“08:02:07”轉(zhuǎn)換成以秒為單位的時(shí)間戳127
t=int(time[0:2])*60*60+int(time[3:5])*60+int(time[6:])
t=t-8*60*60 #8 點(diǎn)開(kāi)始叫號(hào)看診
return t
def insnew(lst,head,data); #將新簽到的患者插入候診隊(duì)伍中,并更新每個(gè)患者預(yù)計(jì)就診的時(shí)間
data[2]=tc(data[2])
data.append(-1)
p=head;q=p;k=0
if head=-1:# 無(wú)人排隊(duì)
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