设某银行有a、b两个业务窗口,且处理业务的速度不一样,其中a窗口处理速度是b窗口的2倍 —— 即当a窗口每处理完2个顾客时,b窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,a窗口顾客优先输出。 输入格式: 输入为一行正整数,其中第1个数字n(≤1000)为顾客总数,后面跟着n位顾客的编号。编号为奇数的顾客需要到a窗口办理业务,为偶数的顾客则去b窗口。数字间以空格分隔。 输出格式: 按业务处理完成的顺序输
时间: 2023-05-31 18:17:55 浏览: 333
### 回答1:
输入一个整数n表示顾客总数,再输入n个整数表示每个顾客的编号,其中第一个数字n代表顾客总数,后面n个整数则为顾客的编号。编号为奇数的顾客需到a窗口办理业务,为偶数的顾客需到b窗口办理业务。数字间以空格分隔。输出顺序按照业务办理完毕的顺序输出。
### 回答2:
题目描述
设某银行有a、b两个业务窗口,且处理业务的速度不一样,其中a窗口处理速度是b窗口的2倍 —— 即当a窗口每处理完2个顾客时,b窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,a窗口顾客优先输出。
输入格式
输入为一行正整数,其中第1个数字n(≤1000)为顾客总数,后面跟着n位顾客的编号。编号为奇数的顾客需要到a窗口办理业务,为偶数的顾客则去b窗口。数字间以空格分隔。
输出格式
按业务处理完成的顺序输出顾客序列,数字间以空格分隔。
样例输入
8 2 1 4 3 6 5 8 7
样例输出
1 3 2 5 4 7 6 8
思路1
首先看题:a窗口处理完两个要比b窗口理完一个优先,但是当同时处理完两个时,a窗口优先输出。
我只想到了让两个窗口分别对两类人处理,这样可以满足a窗口处理完两个人时可以立马输出,但是我没有想到处理完1个人就输出的办法。
既然让两个窗口处理不了的事情,那我们就拆开来处理吧。不难想到,每次a窗口处理完2个人时前面2个人中编号较小的(奇数)就要输出了,如果这时b窗口正好处理完了一个人同时也应该输出,那么拿个数记录下来,看下次是否应该输出即可。
代码1
数很小,全程暴力。
过了就好。
Java 代码
### 回答3:
解题思路:
根据题目所述,有两个业务窗口a、b,其中a的处理速度是b的2倍,也就是说a处理一个顾客的时间是b处理两个顾客的时间。因此我们可以先将顾客按照奇数(a窗口)和偶数(b窗口)分别存储。再将顾客编号按照从小到大的顺序排序,之后我们可以模拟业务顾客处理的过程,即每次让a窗口处理两个顾客,b窗口处理一个顾客,直到所有顾客处理完成。
由于顾客的编号存储了,我们还需要一个队列来存储顾客的编号,模拟处理过程中我们需要不断的弹出队首元素,按照业务完成的顺序输出即可。
代码实现:
(Python 3.0 版本)
n, *nums = map(int, input().split()) # 将输入数据转换为整型列表
a_customers = [] # 存储到达 a 窗口的顾客编号
b_customers = [] # 存储到达 b 窗口的顾客编号
for num in nums:
if num % 2 == 1: # 判断顾客编号是奇数还是偶数
a_customers.append(num)
else:
b_customers.append(num)
a_customers.sort() # 将两个窗口的顾客编号按从小到大排序
b_customers.sort()
result = [] # 存储业务完成的顺序
while a_customers or b_customers: # 只要还有顾客没有处理完成就继续循环
for i in range(2): # a窗口每次处理2个顾客
if a_customers:
result.append(a_customers.pop(0)) # 弹出队首元素,并将其加入业务完成的顺序列表
if b_customers: # b窗口每次只能处理1个顾客
result.append(b_customers.pop(0))
for num in result:
print(num, end=' ') # 将按业务完成的顺序输出的顾客编号以空格隔开
阅读全文