0

我有一个用户数据库(带有数字分配)和一个 Excel 项目列表,我成功地将它们拉入两个数组。一组用户,另一组来自 Excel(任务)。我正在尝试考虑代表这种情况的逻辑:

数据库中的用户可以以数字 0-5 存在。基本上,这表示他们在一周中休息了多少天,并帮助分解每个人可以获得的 Excel 范围内的项目数量,以便正确地比例项目(在我使用布尔指标来指示包括或排除之前) . 例如:

User   |  Present #
-------------------
Jared  |  0 'present daily
John   |  0 'present daily
Mary   |  1 'off 1 day
Tom    |  5 'off rotation entirely

问题是:将这与他们应该获得多少物品联系起来的最佳方法是什么?

我希望JaredJohn获得最多,Mary少一点,并且Tom永远不会被包括在内。假设我有 50 件商品。

我想到的一种方法是,在将名称循环到 Excel 中时,每次我从数组顶部开始计算为“通过”(同时分配到 Excel 单元格中)。

    任何有 0 的人都不会跳过每一次通过
    任何有 1 的人每经过 4 次就会跳过一次
    任何有 2 的人每 3 次通过都会跳过
    任何有 3 的人每 2 次通过都会跳过
    任何有 4 的人每隔一通都会跳过
    永远不会包括任何有 5 的人(简单)

对于我的示例,Jared并且John将始终使用,Mary每四遍都会跳过一次,并且Tom永远不会使用。

这有意义吗?
每第 N 次捕获循环遍历数组的最佳方法是什么?
我是否以正确的方式处理这个问题?

4

2 回答 2

1

为了避免大量循环和这可能导致的延迟,我建议计算一个“需求因素”。
根据可用性分配 50 个项目(在示例中)。可用性显示为0 每天存在到5完全轮换,但反过来使用这些更容易:“轮换”没有可用的资源,因此0“当前每天”有所有工作日(?)可用,所以5.

用户 | 现在 # 表将变为:

 
贾里德 5
约翰福音 5
玛丽 4
汤姆 0
      14

所以 14 个人日可以覆盖 50 项,平均每人日 3.57 项。假设一个项目不能拆分,即每人每天 3 件,超过 8 件。通过将(修订的)表值乘以 INT(item_total/table-total),可以一次性分配“3 each”。所以对于 Jared 和 John,结果是 5x3 = 15,而对于 Mary,结果是 4x3 = 12。

虽然只占 42 个,所以还没有分配 8 个。3,3,2 'extras' 是显而易见的(导致 18,18,14),但编程并不那么容易。我建议 INT 公式在哪里有任何残差,然后使用其结果 +1(即此处为 4 而不是 3)接受 20、20、16、0(6 太多)的初步结果,然后遍历每个用户敲 1关闭(在可能的情况下)直到 6 被击倒。

于 2013-08-02T13:32:03.633 回答
0

这并不完全有意义,因为您似乎分配了每周任务,每天一个:

任何有 0 的人都不会跳过每一次通过

任何有 1 的人每经过 4 次就会跳过一次

任何有 2 的人每 3 次通过都会跳过

任何有 3 的人每 2 次通过都会跳过

任何有 4 的人每隔一通都会跳过

永远不会包括任何有 5 的人(简单)

但是,假设上述情况,您会跳过用户,当他们的个人TaskAssignmentsAttempted Mod (6 - Present#) = 0.

也许你需要:

永远不会跳过任何带 0 的人

任何有 1 的人每经过 5 次就会跳过一次

任何有 2 的人每 5 次通过两次

任何有 3 的人每 5 次通过 3 次

任何有 4 的人每 5 次通过 4 次

任何有 5 的人总是被跳过。

假设上述情况,当用户的个人5 - Present#小于他们的个人时,您会跳过用户TaskAssignmentsAttempted Mod 5

使用其中任何一种方法,您都需要跟踪每个用户尝试分配的次数(成功与否)以及实际分配。

于 2013-08-01T22:44:18.510 回答