本文共 2270 字,大约阅读时间需要 7 分钟。
某银行有一个客户办理业务站,在一天内随机地有客户到达,
设每位客户的业务办理时间是某个范围内的值。 设只有一个窗口,一位业务人员, 要求程序模拟统计在一天时间内,所有客户的平均等待时间。模拟数据按客户到达的先后顺序依次由键盘输入,
对应每位客户有 两个数据,即 到达时刻 和 需要办理业务(占用)的时间。 测试样例格式说明: [键盘输入] 第一行:一天内的客户总人数n第二行:第一个客户的 到达时刻 和 需要办理业务的时间
第三行:第二个客户的到达时刻和需要办理业务的时间 …… 第n行:第n - 1个客户的到达时刻和需要办理业务的时间 第n + 1行:第n 个客户的到达时刻和需要办理业务的时间[正确输出]
第一行:所有客户的平均等待时间(精确到小数点后2位)测试样例:
[第一组自测数据] [键盘输入] 3 1 3 2 1 3 5 [正确输出] 1.33 [第二组自测数据] [键盘输入] 4 1 1 12 5 15 1 16 5 [正确输出] 1.00*/ /*比如说:
1 3(等待0时) 2 1(等待 3 5(最后一个人的占用时间不需要出栈,因为它后面没人了,也不需要关系他什么时候结束)#define MAXLEN 100 #define EMPTY_QUEUE_ERROR -9999999typedef int ElemType;typedef struct { int elem[MAXLEN]; // 用来存队列数据元素的数组 int front; // 指示队首在数组中位置的标识量 int rear; // 指示队尾在数组中位置的标识量adj.后面的,背面的,后方的}intQueue;/*初始化(调整两个位置标识量)*/void InitQueue(intQueue* pQueue) // 指针类型作为形参,某个队列实例的地址{ /********************************************************** 将该队列实例的队首和队尾标识量置零 *********************************************************/ pQueue->front = 0; pQueue->rear = 0;}/*对头元素出队列*/int DeQueue(intQueue* pQueue){ if (!IsEmpty(pQueue)) { /*移动对头元素前保存该值*/ ElemType temp = pQueue->elem[pQueue->front]; /*向前移动front有讲究: 如果是:pQueue->front++,那么front可能会溢出数组, 所以必须利用循环队列的周期性质(除以周期取余数),保证不溢出*/ pQueue->front = (pQueue->front + 1) % MAXLEN; return temp;/*删除成功的出口*/ } return EMPTY_QUEUE_ERROR;}/*入队列将某数据元素x入队列,成功返回1,失败返回0。*/int EnQueue(intQueue* pQueue, ElemType x){ // 1、若该队列已满,则入队列失败 if (IsFull(pQueue)) return 0; // 2、若该队列没满,将x写入队尾,然后队尾位置后移 else { pQueue->elem[pQueue->rear] = x;// x入队列 pQueue->rear = (pQueue->rear + 1) % MAXLEN;// 队尾后移 } return 1;}/*只能处理整点/占用整数小时的情况(可以修改数据结构及相关函数的参数处理类型来提升使用范围*/float avg_wait_time(){ int n = 0,i = 0; int come_time = 0, occupy_time = 0; int pre_time = 0,/*前一个人到的时间*/ pre_off_time = 0,/*前一个人离开的时刻*/ aft_time = 0;/*后一个人到达的时间*/ int sum_wait_time = 0; intQueue q_come, q_occupy; InitQueue(&q_come); InitQueue(&q_occupy); printf("输入一天内的客户总人数n:\n"); scanf("%d", &n); printf("输入到达时刻 和 需要办理业务(占用)的时间:\n"); while (iaft_time) { sum_wait_time += (pre_off_time - aft_time); } else { /*不做累加,但下一个人来的晚,以至于要调整pre_off_time(此时已不是本意了)*/ pre_off_time = aft_time; } /*为下一次比较做预备*/ i++; } return sum_wait_time * 1.0 / n;}int main(){ printf("%.2f\n", avg_wait_time());}
转载地址:http://cnzt.baihongyu.com/