设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。 输入格式: 输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。 输出格式: 按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。java编写
时间: 2024-03-09 12:44:57 浏览: 66
以下是Java代码实现:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] customers = new int[n];
for (int i = 0; i < n; i++) {
customers[i] = scanner.nextInt();
}
List<Integer> aCustomers = new ArrayList<>(); // 存放A窗口的顾客编号
List<Integer> bCustomers = new ArrayList<>(); // 存放B窗口的顾客编号
for (int customer : customers) {
if (customer % 2 == 1) { // 奇数编号的顾客去A窗口
aCustomers.add(customer);
} else { // 偶数编号的顾客去B窗口
bCustomers.add(customer);
}
while (aCustomers.size() >= 2 && bCustomers.size() >= 1) { // A窗口每处理完2个顾客,B窗口处理1个顾客
System.out.print(aCustomers.remove(0) + " ");
System.out.print(aCustomers.remove(0) + " ");
System.out.print(bCustomers.remove(0) + " ");
}
}
// 处理剩余的顾客
while (aCustomers.size() >= 2) {
System.out.print(aCustomers.remove(0) + " ");
System.out.print(aCustomers.remove(0) + " ");
}
while (bCustomers.size() >= 1) {
System.out.print(bCustomers.remove(0) + " ");
}
}
}
```
需要注意的是,题目中要求A窗口处理完2个顾客后,B窗口才能处理1个顾客,因此在模拟过程中需要注意处理顺序。同时需要注意题目中没有考虑顾客先后到达的时间间隔,因此只需要按照输入顺序模拟即可。
阅读全文