### 思路
1. **初始化队列**:使用`InitQueue`函数初始化一个队列,用于存储客户的到达时刻和办理时间。
2. **读取输入**:读取客户总人数和每个客户的到达时刻及办理时间。
3. **模拟业务办理**:
- 维护一个当前时间变量`currentTime`,初始值为0。
- 遍历每个客户,计算其等待时间并更新`currentTime`。
- 将客户的到达时刻和办理时间入队。
- 如果当前时间小于客户的到达时刻,更新`currentTime`为客户的到达时刻。
- 计算客户的等待时间并累加到总等待时间。
- 更新`currentTime`为当前时间加上客户的办理时间。
4. **计算平均等待时间**:总等待时间除以客户总人数,输出结果。
### 伪代码
1. 初始化队列`Q`。
2. 读取客户总人数`n`。
3. 初始化`currentTime`为0,`totalWaitTime`为0。
4. 遍历每个客户:
- 读取客户的到达时刻和办理时间。
- 如果`currentTime`小于客户的到达时刻,更新`currentTime`为客户的到达时刻。
- 计算客户的等待时间并累加到`totalWaitTime`。
- 更新`currentTime`为`currentTime`加上客户的办理时间。
5. 计算平均等待时间`avgWaitTime`为`totalWaitTime`除以`n`。
6. 输出`avgWaitTime`,保留两位小数。
### C++代码
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;#define OK 1
#define ERROR 0
typedef int Status;
typedef int QElemType;
#define MAXQSIZE 100typedef struct {QElemType *base;int front;int rear;
} SqQueue;Status InitQueue(SqQueue &Q) {Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));if (!Q.base) exit(1);Q.rear = Q.front = 0;return OK;
}Status EnQueue(SqQueue &Q, QElemType e) {if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR;Q.base[Q.rear] = e;Q.rear = (Q.rear + 1) % MAXQSIZE;return OK;
}Status DeQueue(SqQueue &Q, QElemType &e) {if (Q.front == Q.rear) return ERROR;e = Q.base[Q.front];Q.front = (Q.front + 1) % MAXQSIZE;return OK;
}Status GetHead(SqQueue Q, QElemType &e) {if (Q.front == Q.rear) return ERROR;e = Q.base[Q.front];return OK;
}int QueueLength(SqQueue Q) {return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}int main() {int n;cin >> n;SqQueue arrivalQueue, serviceQueue;InitQueue(arrivalQueue);InitQueue(serviceQueue);for (int i = 0; i < n; ++i) {int arrivalTime, serviceTime;cin >> arrivalTime >> serviceTime;EnQueue(arrivalQueue, arrivalTime);EnQueue(serviceQueue, serviceTime);}int currentTime = 0;double totalWaitTime = 0.0;for (int i = 0; i < n; ++i) {int arrivalTime, serviceTime;DeQueue(arrivalQueue, arrivalTime);DeQueue(serviceQueue, serviceTime);if (currentTime < arrivalTime) {currentTime = arrivalTime;}totalWaitTime += (currentTime - arrivalTime);currentTime += serviceTime;}double avgWaitTime = totalWaitTime / n;cout << fixed << setprecision(2) << avgWaitTime << endl;return 0;
}