快餐店模拟:如何“排队”客户?

时间:2012-11-10 18:54:59

标签: c arrays loops queue simulation

A link to my PasteBin: http://pastebin.com/nzW3hZdT

  

我正在模拟一家超过三家的快餐店   小时。三小时分为18个区间,由10个区组成   每个分钟。

     

根据每分钟'r'客户的到达率,'R'是   成立。 R是概率的所有18的到达率   间隔(或多或少r / 60)。

     

此模拟的目的是自己定义'r'并查看   所有18个区间内每个客户的平均等待时间(avgWait)。   通常,'r'越大,'avgWait'越大。

此时在我的代码中(粘贴在上面),平均等待时间正在为一位客户正确打印。

让我们说第一和第二位客户分别在收银台1和2上接受订单大约需要85秒。在这85秒内,很有可能会有更多客户到达,但自cash1empty=FALSE和{{ {1}}他们显然无法获得他们的订单。

如何设置此队列,以便程序知道在前两个订单获得服务后还有其他几个等待服务?

代码摘录:

cash2empty=FALSE

我为此带来的不便表示歉意,但我不能使用“结构”。数组是可以接受的!

2 个答案:

答案 0 :(得分:3)

保留队列中queuedCustomers的客户数量。每个新客户到达时添加一个(同时增加totalCustomer)。当您为客户提供服务时减去一个,即当您发送cash1empty=FALSE;cash2empty=FALSE;

更改

            if (customerArrive>=x)
            {

                // A customer arrived during this second!
                totalCustomer++;

            if (customerArrive>=x)
            {

                // A customer arrived during this second!
                totalCustomer++;
                queuedCustomers++;
            }
            if (queuedCustomers > 0)
            {

补遗:选择收银员......

而不是if ((cash1empty==TRUE)&&(cash2empty==TRUE))

部分

做类似的事情:

cointoss = rand()%2

if ((cash1empty==TRUE) && ((cash2empty!=TRUE) || (cointoss == 1)))
{
    // use cashier 1
} 
else if (cash2empty==TRUE)
{
    // use cashier 2
} 
else
{
    // wait
}

答案 1 :(得分:3)

为什么不使用Queue?使用常规数组似乎没有道理。使用队列,您可以使用Dequeue()方法获取第一个客户并将其从队列中删除,并使用[Enqueue()] [3]方法添加新客户。

为什么你会使用除队列以外的任何东西?