2

我有成组的彩色硬币。每个组都有许多硬币,这些硬币可能与其他组相同,也可能不同。

我想将所有硬币放在一个数组中,并有一个约束:我希望分布尽可能规则。然后,这将用于绘制一条更大的线,其中包含每种颜色的确切比例。

示例 1:

  • 2 黑色
  • 2 白色
  • 1 红色

结果 : BWRBW

示例 2:

  • 49黑色
  • 49 白色
  • 2 红色

结果:(BW)x12 R (BW)x25 R (BW)x12

结果是连续的黑色和白色,两个红色硬币在位置〜25和〜75(意味着它们距离50)。

示例 3:

  • 4 黑色
  • 4 白色
  • 1 红色
  • 1 绿色

结果:BWRBWBGWBW

绿色和红色硬币也相距“远”。

注意:问题已经“减少”(即从不 50 黑色和 50 白色硬币:此案例已简化为 2 个硬币:1 黑色和 1 白色)。

4

1 回答 1

1

一种简单的方法是将它们全部洗牌,然后将它们随机放入数组中 - 有足够的硬币,这往往是规则的。

另一种方法是将硬币从最小的组到最大的组,并尽可能平均地分配硬币。让我们看第二个例子:你把红色放在每个100 / 2 = 50地方一次:

R _ _ _ ... R _ _ _ ... _ _ _

然后你把白人放在(100 - 2) / 49 = 2从第一个索引开始的每个索引中:

R W _ W _ ... R W _ W _ ... _ W _

依此类推,每个(100 - 2 - 49) / 49 = 1索引都是黑色的:

R W B W B ... R W B W B ... B W B

好的...现在我看到 OP 在第三个示例中还要求尽可能远地使用红色和绿色,因此为了实现这一点,我们必须稍微改变算法。我们将不得不根据它们的大小对组进行排序,并在传播它们时在颜色之间进行迭代。所以在第三个例子中,第一组大小为 2,由红色和绿色组成。

于 2013-05-24T14:09:25.497 回答