编程语言
首页 > 编程语言> > 中国大学MOOC-数据结构与算法实战-周强 例-3 简单模拟单队列排队 (20 分)

中国大学MOOC-数据结构与算法实战-周强 例-3 简单模拟单队列排队 (20 分)

作者:互联网

用程序简单模拟一个单队列多窗口的排队模式:
设某银行有一个固定能容纳N个顾客的等候区,顾客想进银行,若等候区有空则可进,否则被拒绝进入。
每当银行柜员叫号时,等候区中最先进入的顾客离开等候区前往柜台办理业务,若叫号时等候区无人,则此次叫号作废。

输入格式:

第一行输入一个不大于20的正整数N,表示银行等候区能容纳的人数,
接下来用若干行表示依时间顺序先后发生的“顾客想进银行”或“叫号”事件,格式分别是:

最后一行是一个#符号,表示输入结束。
注意:

  1. 题目输入保证每个顾客的编号是独一无二的,即:不会出现想进银行的顾客与已经在等候区的顾客编号相同的情况。
  2. 保证后一个事件一定在前一个事件完成之后才发生,即:不需要考虑事件之间的“同步”问题。

输出格式:

对于输入的每个事件,按同样顺序在一行内输出事件的结果,格式分别是:

输入样例:

3
In 101
In 102
In 103
In 104
Calling
In 105
Calling
Calling
Calling
Calling
#

输出样例:

101 joined. Total:1
102 joined. Total:2
103 joined. Total:3
104 rejected.
101 called. Total:2
105 joined. Total:3
102 called. Total:2
103 called. Total:1
105 called. Total:0
No one!

代码:
import queue
n = eval(input())
m = 0
q = queue.Queue()
while True:
    strings = input().split()
    if strings[0] == "#":
        break
    elif strings[0] == "In":
        if m < n:
            m = m + 1
            q.put(strings[1])
            print("{} joined. Total:{}".format(strings[1], m))
        else:
            print("{} rejected.".format(strings[1]))
    elif strings[0] == "Calling":
        if q.empty():
            print("No one!")
        else:
            m = m - 1
            a = q.get()
            print("{} called. Total:{}".format(a, m))

  

标签:周强,等候,MOOC,20,joined,Calling,顾客,Total,strings
来源: https://www.cnblogs.com/intbjw/p/11795131.html