-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 个客户/分钟的平均客户到达率,并且到达模型将合理地接近上述描述。在每个时间段,您将让您的程序处理任何必要的事情。

... 目标和可交付成果

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

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

最好这样制作一个三维数组:

time[3][60][60]

一共三个小时,60分钟以内,60秒以内。

或者,我在想我应该用这个结构做一个“for-loop”:

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

此循环的每次迭代将代表三小时模拟中的一秒(3hx60mx60s=10800 秒)。

伙计们,我在正确的轨道上吗?哪种方法更靠谱。是否还有其他对该程序至关重要的阵列?

一如既往地感谢您的帮助!

4

1 回答 1

1

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

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

这个项目要研究的数据结构是一个队列。这可以使用数组来实现,但需要一些额外的工作。

于 2012-11-09T20:03:22.950 回答