引自强大而免费的微信小程序:皆我百晓生。
以下是一个简单的C语言程序,用于模拟银行窗口的业务活动,并计算客户在银行的平均逗留时间。程序使用队列(链表实现)作为存储结构。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Queue {
Node *front;
Node *rear;
int size;
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
}
// 入队操作
void enqueue(Queue *queue, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
}
// 出队操作
int dequeue(Queue *queue) {
if (queue->front == NULL) {
printf("队列为空\n");
return -1;
}
Node *temp = queue->front;
int data = temp->data;
queue->front = queue->front->next;
free(temp);
if (queue->front == NULL) {
queue->rear = NULL;
}
queue->size--;
return data;
}
// 获取队列大小
int getSize(Queue *queue) {
return queue->size;
}
int main() {
Queue *windows = (Queue *)malloc(4 * sizeof(Queue));
int totalTime = 0;
// 初始化窗口
for (int i = 0; i < 4; i++) {
initQueue(&windows[i]);
}
while (1) {
int numCustomers;
printf("请输入进入银行的客户人数(输入0退出):");
if (scanf("%d", &numCustomers) != 1) {
printf("输入内容非法,请重新输入。\n");
scanf("%*s"); // 清空输入缓冲区
continue;
}
if (numCustomers == 0) {
break;
}
int minSizeWindow = 0;
for (int i = 1; i < 4; i++) {
if (getSize(&windows[i]) < getSize(&windows[minSizeWindow])) {
minSizeWindow = i;
}
}
printf("请依次输入每位客户的业务所需时间:\n");
for (int i = 0; i < numCustomers; i++) {
int serviceTime;
printf("客户%d:", i + 1);
if (scanf("%d", &serviceTime) != 1) {
printf("输入内容非法,请重新输入。\n");
scanf("%*s"); // 清空输入缓冲区
i--;
continue;
}
enqueue(&windows[minSizeWindow], serviceTime);
}
}
// 计算平均逗留时间
for (int i = 0; i < 4; i++) {
while (getSize(&windows[i]) > 0) {
int serviceTime = dequeue(&windows[i]);
totalTime += serviceTime;
}
}
double avgTime = (double)totalTime / 4;
printf("客户在银行的平均逗留时间为:%.2f\n", avgTime);
free(windows);
return 0;
}
上述代码中使用了一个包含四个队列的数组 Queue windows[4],每个队列表示一个窗口。每次有客户进入银行时,选择队列大小最小的窗口,将客户的业务所需时间入队。最后,遍历所有窗口的队列,将每个客户的业务所需时间累加,得到总的逗留时间,再根据窗口数量求平均值即可。
请确保在运行程序时输入符合测试要求的数据,如合法数据、整体非法数据和局部非法数据,以保证程序的稳定性。