餐厅叫号系统
提交数: 211, 通过率: 53.08%, 平均分: 61.71
题目描述:
餐厅叫号系统是现代化餐厅常用的信息管理系统,小明设计了一款模拟餐厅叫号系统的程序。该程序在读取当天就餐信息(数据格式如图所示)后,可以模拟餐厅叫号的顺序,并计算出当天所有客人的等待时间。餐厅共有3种不同类型座位,数量分别是 30、10、 10。客人到达餐厅后,若对应类型的座位有空位,则直接安排客人点餐;若对应类型的座位没有空余,则需要排队等待其他客人离开后才能安排点餐。小明将原始数据读取后将时间格式“HH:MM” 换算成分钟,然后按分钟数升序排列,再依次模拟餐厅叫号的过程,同时计算客人的等待时间,程序运行结果如图所示。
输入格式:
第一行一个整数n
接下来 n 行,每行三个变量,分别是座位类型,到达时间和进出情况(IN或者OUT)
输出格式:
输出n+1行,前n行输出每个客人点餐时间,第n+1行输出所有客人等待时间
数据范围:
n<=100
样例输入:
8 1 8:30 IN 3 9:00 IN 1 9:00 IN 1 10:00 IN 1 10:00 OUT 3 11:06 OUT 2 14:44 IN 2 16:28 OUT
样例输出:
类别为 1 的客人在 510 分点餐 类别为 3 的客人在 540 分点餐 类别为 1 的客人在 600 分点餐 类别为 2 的客人在 884 分点餐 所有客人等待时间: 60 分钟
提示:
a = []
def read_data(n): #读取数据并排序
# df = [[1,"8:30","IN"],[3,"9:00","IN"],[1,"9:00","IN"],[1,"10:00","IN"],[1,"10:00","OUT"],[3,"11:06","OUT"],[2,"14:44","IN"],[2,"16:28","OUT"]]
for i in range(n): #逐行读取数据到列表 row
row = input().split()
s = row[1] #将时间数据赋值到 s
b , c = map(int,s.split(':')) #以“:”分割小时到 b,分钟到 c
s = b * 60 + c #将 b 小时、 c 分钟换算成 s 分钟
a.append([int(row[0]) , s , row[2]] ) #a 追加一个元素[row[0],s,row[2]]
for i in range(n - 1):
for j in range(n - 1 , i , -1):
if a[j][1] < a[j-1][1]:
a[j] , a[j-1] = a[j-1] , a[j]
n = int(input())
read_data(n)
b = [0,1,1,1] #初始 3 种类型的座位数分别是 30,10,10
h = []
q = []
for i in range( 4 ) :
h.append( [-1,-1] ) #h 末尾追加一个元素[-1,-1]
c = 0
total = 0 #填空
for i in range(n):
m = a[i][0]
if a[i][2]=="OUT":
b[m] += 1
if h[m][0] != -1:
total += ________ #后部分填空
h[m][0] = q[h[m][0]][2]
b[m] -= 1
print("类别为",m,"的客人在",a[i][1],"分点餐")
else:
if b[m] > 0:
b[m] -= 1
print("类别为",m,"的客人在",a[i][1],"分点餐")
else:
q.append([m , a[i][1] , -1])
if h[m][0] == -1:
h[m][0] = ________ #填空
if h[m][1] != -1:
________ #填空
h[m][1] = c #填空
________ #填空
print("所有客人等待时间:",total,"分钟")
时间限制: 1000ms空间限制: 256MB
来源: 2023年4月金华十校信息技术第15题