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

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

时间限制:1000MS 代码长度限制:10KB
提交次数:2956 通过次数:1424

题型: 编程题 语言: G++;GCC
Description
队列的基本操作如下:
#include
#include
#include
#define OK 1
#define ERROR 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int QElemType;
#define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1)

typedef struct
{
QElemType *base; // 初始化的动态分配存储空间
int front; // 头指针,若队列不空,指向队列头元素
int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;

Status InitQueue(SqQueue &Q)
{
// 构造一个空队列Q,该队列预定义大小为MAXQSIZE
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)
{
// 插入元素e为Q的新的队尾元素
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)
{
// 若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
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)
{
// 若队列不空,则用e返回队头元素,并返回OK,否则返回ERROR
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
return OK;
}

int QueueLength(SqQueue Q)
{
// 返回Q的元素个数
return Q.rear%MAXQSIZE-Q.front%MAXQSIZE;
}
某银行有一个客户办理业务站,在一天内随机地有客户到达,设每位客户的业务办理时间是某个范围内的值。设只有一个窗口,一位业务人员,要求程序模拟统计在
一天时间内,所有客户的平均等待时间。模拟数据按客户到达的先后顺序依次由键盘输入,对应每位客户有两个数据,到达时刻和需要办理业务的时间。

输入格式
第一行:一天内的客户总人数n
第二行:第一个客户的到达时刻和需要办理业务的时间
第三行:第二个客户的到达时刻和需要办理业务的时间
……
第n行:第n - 1个客户的到达时刻和需要办理业务的时间
第n + 1行:第n 个客户的到达时刻和需要办理业务的时间

输出格式
第一行:所有客户的平均等待时间(精确到小数点后2位)

输入样例
3
1 3
2 1
3 5

输出样例
1.33

注意这里会出现就是队伍已经没人了,但下一个人还没有来的情况

#include
#include "iostream"
#include 
#define OK 1
#define ERROR 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int QElemType;
#define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1)
using namespace std;
typedef struct
{
     
    QElemType *base; // 初始化的动态分配存储空间
    int front; // 头指针,若队列不空,指向队列头元素
    int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;

Status InitQueue(SqQueue &Q)
{
     
// 构造一个空队列Q,该队列预定义大小为MAXQSIZE
// 请补全代码
Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
Q.front=Q.rear=0;
    return OK;

}

Status EnQueue(SqQueue &Q,QElemType e)
{
     
// 插入元素e为Q的新的队尾元素
// 请补全代码
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)
{
     
// 若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
// 请补全代码
if(Q.rear==Q.front)
    return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
    return OK;
}

Status GetHead(SqQueue Q, QElemType &e)
{
     
// 若队列不空,则用e返回队头元素,并返回OK,否则返回ERROR
// 请补全代码
if(Q.rear==Q.front)
    return ERROR;
e=Q.base[Q.front];
    return OK;

}

int QueueLength(SqQueue Q)
{
     
// 返回Q的元素个数
// 请补全代码
    return abs(Q.front-Q.rear);

}

double QueueTraverse(SqQueue Q)
{
     
// 若队列不空,则从队头到队尾依次输出各个队列元素,并返回OK;否则返回ERROR.
    int i;
    double total = 0;
    i=Q.front;
    if(i==Q.rear)printf("The Queue is Empty!");  //请填空
    else{
     
        while(i!=Q.rear)     //请填空
        {
     
           // cout<
            total+=Q.base[i];
            i+=1;
        }
    }
   // cout<
    return total;
}

int main()
{
     
    double res;
    int leave;
    int stay;
    SqQueue Q;
    InitQueue(Q);
    int n;
    scanf("%d",&n);
    //n=n-1;
    int a,b;
    scanf("%d%d",&a,&b);
    EnQueue(Q,0);
    leave=a+b;
    for(int k=0;k<n-1;k++)
    {
     
        scanf("%d%d",&a,&b);
        stay=leave-a;
        //这里需要注意stay小于0的情况
        if(stay<0)
        {
     
            stay=0;
            leave=a+b;
        }
        else{
     
            leave=leave+b;
        }
        
        EnQueue(Q,stay);
    }
    res= QueueTraverse(Q)/(n);
    printf("%.2f",res);
}

你可能感兴趣的:(数据结构实验题)