parent
c587606636
commit
3fd8360cb3
@ -1,75 +0,0 @@
|
||||
import java.util.*;
|
||||
|
||||
public class BankQueue {
|
||||
|
||||
static class Customer {
|
||||
int arrivalTime;
|
||||
int processTime;
|
||||
|
||||
public Customer(int arrivalTime, int processTime) {
|
||||
this.arrivalTime = arrivalTime;
|
||||
this.processTime = processTime;
|
||||
}
|
||||
}
|
||||
|
||||
public static double calculateAverageWaitTime(List<Customer> customers, int maxProc, int maxWindow) {
|
||||
Queue<Integer>[] windows = new LinkedList[maxWindow];
|
||||
for (int i = 0; i < maxWindow; i++) {
|
||||
windows[i] = new LinkedList<>();
|
||||
}
|
||||
|
||||
int totalWaitTime = 0;
|
||||
int numCustomersServed = 0;
|
||||
|
||||
for (Customer customer : customers) {
|
||||
// 寻找最早空闲的窗口
|
||||
int minFinishTime = Integer.MAX_VALUE;
|
||||
int chosenWindow = -1;
|
||||
|
||||
for (int i = 0; i < maxWindow; i++) {
|
||||
if (windows[i].isEmpty()) {
|
||||
chosenWindow = i;
|
||||
break;
|
||||
}
|
||||
int finishTime = windows[i].peek();
|
||||
if (finishTime < minFinishTime) {
|
||||
minFinishTime = finishTime;
|
||||
chosenWindow = i;
|
||||
}
|
||||
}
|
||||
|
||||
// 计算等待时间
|
||||
int waitTime = Math.max(0, minFinishTime - customer.arrivalTime);
|
||||
totalWaitTime += waitTime;
|
||||
|
||||
// 更新服务结束时间
|
||||
int serviceEndTime = customer.arrivalTime + waitTime + customer.processTime;
|
||||
if (serviceEndTime - customer.arrivalTime <= maxProc) {
|
||||
windows[chosenWindow].offer(serviceEndTime);
|
||||
numCustomersServed++;
|
||||
}
|
||||
}
|
||||
|
||||
if (numCustomersServed == 0) {
|
||||
return 0; // 没有顾客被服务
|
||||
}
|
||||
|
||||
return (double) totalWaitTime / numCustomersServed;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 假设的输入数据
|
||||
List<Customer> customers = Arrays.asList(
|
||||
new Customer(0, 3),
|
||||
new Customer(2, 3),
|
||||
new Customer(5, 4),
|
||||
new Customer(6, 2)
|
||||
);
|
||||
|
||||
int maxProc = 10;
|
||||
int maxWindow = 2;
|
||||
|
||||
double avgWaitTime = calculateAverageWaitTime(customers, maxProc, maxWindow);
|
||||
System.out.println("平均等待时间: " + avgWaitTime);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue