欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 8590 队列的应用——银行客户平均等待时间

8590 队列的应用——银行客户平均等待时间

2024/11/6 21:16:59 来源:https://blog.csdn.net/huang1xiao1sheng/article/details/142435081  浏览:    关键词:8590 队列的应用——银行客户平均等待时间

### 思路
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;
}


 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com