DS队列之银行排队
这题简单的运用了队列的知识,突然发现用 Object 的队列和栈都比较好用,需要什么类型直接强转即可。另外要注意一个点,switch 最好只用来选择 int 类型的数据,String 的话用 if-else吧。
题目描述
在银行营业大厅共服务3种客户,类型为A\B\C,大厅分别设置了3个窗口分别服务三种客户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。每个窗口按照客户到来的顺序进行服务。
编程实现它们的办理流程,请使用C++自带的queue必须使用队列实现,其他方法0分!
输入
第一行输入先输入n表示客户数量
第二行输入每个客户的类型,数据之间用用空格隔开
第三行输入每个客户的办理时间,数据之间用用空格隔开
输出
第一行输出A类客户的平均办理时间
第二行输出B类客户的平均办理时间
第三行输出C类客户的平均办理时间
样例输入
8
A B C B C A A A
10 20 30 40 50 60 70 80
样例输出
55
30
40
Solution:
import java.util.*;
/**
* @author: Liu Canbin
* @date: 2019/1/2
*/
public class Main {
public static void main(String[] args) {
Queue queue = new LinkedList();
int timeA = 0,timeB=0,timeC=0;
int countA = 0,countB = 0,countC=0;
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 0; i <n ; i++) {
queue.offer(scanner.next());//offer 入队列
}
for (int i = 0; i <n ; i++) {
String a = (String) ((LinkedList) queue).pop();//取队头,并出队列
if (a.equals("A")) {
timeA += scanner.nextInt();
countA++;
}else if (a.equals("B")) {
timeB += scanner.nextInt();
countB++;
}else {
timeC += scanner.nextInt();
countC++;
}
}
countA = timeA/countA;
countB = timeB/countB;
countC = timeC/countC;
System.out.println(countA+"\n"+countB+"\n"+countC);
}
}