2012-11-09 49 views
-1

假设一家快餐店出售沙拉和汉堡。有两位收银员 。在收银员1的情况下, 完成沙拉订单需要的秒数均匀分布在 {55,56,...,64,65};并且完成一个 汉堡的顺序所花费的秒数在{111,112,...,129,130​​}中均匀分布。 在收银员2的情况下,完成一个 沙拉的订单需要的秒数均匀分布在{65,66,...,74,75};并且完成汉堡订单所花费的秒数 统一分布在{121,122,...,139,140}中。假设客户 随机到达,但平均到达率r客户每分钟 。数组在哪里使用?

考虑两种不同的情况。

•客户在一个 线上等待服务,并且当两个收银员中的任何一个可用时,该线中的第一个客户将转到收银员并获得服务。在 这种情况下,当客户到达餐厅时,他或者 得到服务,如果没有排队,或者在线路末端等待。

•客户在两行中等待,每一行为收银员。当且仅当其行 的收银员变为可用时,第一个客户 才能得到服务。在这种情况下,当客户到达 餐厅时,他加入较短的行。此外,我们强加 的条件,如果一个客户加入一条线路,当另一条线路变短时,或者当另一个收银员变为空闲时,他不会移动到另一条线路上的 或另一个收银员。

在考虑的两种情况下, 当他目前服务的客户 已收到他点餐的食物时,收银员才会开始为下一位顾客提供服务。 (这是 点我们称之为“客户的订单完成”。)

...模拟

对于每个两种情况和为r的几种选择 (见后面 介绍),你将在3小时内模拟客户 到达/等待/获取服务,即 从时间0到180分钟,假设在时间0时 没有客户等待并且两个收银员都可用;整个 3个小时的时间段被分成每个1秒 持续时间的时间段。在每个时间段,以r/60的概率,您将使一个新的客户到达,并且以1 - r/60的概率,您不会让任何新的客户到达 。这应该导致平均客户到达率r客户/分钟,并且到达模型将合理地 接近于上面描述的。在每个时间段,您将使您的程序处理任何必要的事件。

...目标和 交付

你需要编写一个程序来调查以下。 对于这两种情景中的每一种情景以及每种情景,您需要将 三小时模拟时间段划分为10分钟时间段,并且在期间i(i∈{1,2,..., 18}),计算客户的总体等待时间(即从他到达餐厅的 时间到订单完成时的时间),您需要为每个客户打印 平均等待时间 期间i。请注意,如果到达期间我的客户没有 在三个小时的模拟期内已经送达,那么他的等待时间 不知道,因此在此期间到达 的客户的平均等待时间不可能是在这种情况下,只需要pr int“不是 可用”作为该时期的平均等待时间。

所以,这个程序处理小时,分钟和秒。

难道是最好使一个三维阵列,例如:内

time[3][60][60] 

共三小时,用60分钟,以在60秒内。

可替换地,我想,我应该做一个“for循环”具有这种结构:

for (time=0;t<10800;t++) 

这个循环的每次迭代将代表3小时模拟的一秒钟(3hx60mx60s = 10800秒)的。

我在正确的轨道上在这里球员?哪种方法更合理。是否有其他阵列对这个程序至关重要?

一如既往的帮助表示赞赏!

+0

我会象征性地处理它,而不是使用基于滴答的解决方案。 – Wug

回答

1

在时间的内部表示以秒为单位,几乎总是最好的;与使用三维数组相比,使用for循环会更容易。一个很好的约定是将其写成

MAX_SECONDS = 3 * 60 * 60 
for (t=0;t<MAX_SECONDS;t++) 

的数据结构来考虑这个项目是恰如其分的队列。这可以使用数组来实现,但需要一些额外的工作。