百度笔试测试题 #银行客户

题目

某银行将客户分为了若干个优先级,1级最高,5级最低,当你需要在银行办理业务时,优先级高的人随时可以插队到优先级低的人的前面。现在给出一个人员到来和银行办理业务的时间序列,请你在每次银行办理业务时输出客户的编号。

如果同时有多位优先级相同且最高的客户,则按照先来后到的顺序办理。

输入

python写输入第一行是一个正整数n,表示输入的序列中的事件数量。(1<=n<=500)


接下来有n行,每行第一个字符为a或p。当字符为a时,后面会有两个的正整数num和x,表示到来的客户编号为num,优先级为x;当字符为p时,表示当前优先级最高的客户去办理业务。输出包含若干行,对于每一个p,输出一行,仅包含一个正整数num,表示办理业务的客户编号。


思路

可以使用一个字典来记录每个优先级的客户队列,字典的键是优先级,值是一个列表,用于存储该优先级的客户。同时,可以使用一个队列来记录当前正在办理业务的客户,队列中的元素是客户编号。 每次有新的客户到来时,先将其加入到对应优先级的队列中。然后,遍历优先级队列,将优先级最高的客户加入到业务队列中。如果有多位优先级相同且最高的客户,则按照先来后到的顺序依次加入到业务队列中。 每次办理完业务后,将业务队列中的第一个客户弹出,同时将其从对应优先级的队列中移除。

from collections import deque
priority_customers = {
    1: deque(),
    2: deque(),
    3: deque(),
    4: deque(),
    5: deque(),
}
business_queue = deque()
n = int(input())
for i in range(n):
    op = input().split()
    if op[0] == "a":
        num, x = op[1], int(op[2])
        priority_customers[x].append(num)
        # 遍历优先级队列,将优先级最高的客户加入到业务队列中
       
    elif op[0] == "p":
        for j in range(1, 6):
            if priority_customers[j]:
                business_queue.append(priority_customers[j].popleft())
                break
        if business_queue:
            customer_id = business_queue.popleft()
            # 从对应优先级的队列中移除该客户
            for j in range(1, 6):
                if customer_id in priority_customers[j]:
                    priority_customers[j].remove(customer_id)
                    break
            print(customer_id)

猜你喜欢

转载自blog.csdn.net/long_songs/article/details/129410099