标题:排队等待问题(队列) 蹦了直接~求搭救 谢谢
只看楼主
凉粉呵呵
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2013-2-10
结帖率:81.82%
 问题点数:0 回复次数:0 
排队等待问题(队列) 蹦了直接~求搭救 谢谢
银行有一个客户办理业务站,在一天内随机地有客户到达,设每位客户的业务办理时间是某个范围内的值。设只有一个窗口,一位业务人员,要求程序模拟统计在一天时间内,所有客户的平均等待时间。模拟数据按客户到达的先后顺序依次由键盘输入,对应每位客户有两个数据,到达时刻和需要办理业务的时间。


输入格式

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


输出格式

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


输入样例

3 1 3 2 1 3 5

输出样例

1.33




源代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define    OVERFLOW -2
typedef struct QNode{                                    //修改结构体的定义,结构体含有两个数据  intertime和occurtime
    double intertime;
    double occurtime;
    struct QNode *next;
}QNode,*Queueptr;

typedef struct{            //单向链式队列

    Queueptr front;        //队头指针  队头指针,没有数据域
    Queueptr rear;        //队尾指针                    
}LinkQueue;
 
int InitQueue(LinkQueue &Q)//队列初始化
{
    Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));
    if(!Q.front) exit(OVERFLOW);
    Q.front->next=NULL;
    return OK;
}
int EnQueue(LinkQueue &Q,double a,double b)//插入队尾元素a,b
{
    Queueptr p;
    p=(Queueptr)malloc(sizeof(QNode));
    if(!p)
        exit(OVERFLOW);
    p->intertime=a;
    p->occurtime=b;

    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    return OK;
}

int DeQueue(LinkQueue &Q)//删除队头元素
{
    Queueptr p;
    if(Q.front==Q.rear)
        return ERROR;
    p=Q.front->next;
    Q.front->next=p->next;
    if(Q.rear==p) Q.rear=Q.front;
    free(p);
    return OK;
}
double waittime_Queue(LinkQueue &Q)                //客户等待时间计算
{
    double waittime;
    Queueptr q;
    double clock=0,num=0;
    while(Q.front!=Q.rear)
    {
        
        q=Q.front->next;
   
        if((q->intertime<clock)||(num==0))
        {
            num++;                                //num只是为了设置第一个数做特殊处理,因为第一个数据是不存在等待时间的
            if(num==1)
            {
            clock=q->intertime+q->occurtime;
            }
            else
            {
            waittime=waittime+clock-(q->intertime);
            clock=clock+q->occurtime;
            }
        }
        DeQueue(Q);
    }
    return waittime;
}
int chudui(LinkQueue &Q)
{

    Queueptr q;
    printf("The Queue is:");
    q=Q.front->next;
    while((Q.rear-q)>=0)
    {
        printf("%lf %lf\n",q->intertime,q->occurtime);
        q++;
    }
    return OK;
}

int main()
{
    LinkQueue Q;
    InitQueue(Q);                     //一定要初始化,否则会蹦的
    int n,m;
    double intertime,occurtime,aver;
    scanf("%d",&n);
    m=n;
    while(n--)
    {
        scanf("%lf%lf",&intertime,&occurtime);
//        printf("%lf %lf\n",intertime,occurtime);     //检验输入是否有误
//        EnQueue(Q,intertime,occurtime);                //检验入队列的正确性
//        printf("%lf\n",waittime_Queue(Q));
//        chudui(Q);                                    //检验队列的正确性
    }
    aver=waittime_Queue(Q)/m;
    printf("%.2lf\n",aver);
    return 0;
}




waittimeQueue那个函数应该有问题,还有chudui函数是用来测试的  好像也挂了,一些测试的语句被我注释掉了
思路:waitetime=(1+3-2)+(1+3+1-3)
      aver=4/3
谢谢
搜索更多相关主题的帖子: 业务 
2013-04-10 19:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-403678-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.272878 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved