使用固定颜色构建常规图案

时间:2013-05-24 13:07:50

标签: arrays algorithm distribution

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

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

示例1:

  • 2 Black
  • 2 White
  • 1 Red

结果:B W R B W

示例2:

  • 49 Black
  • 49 White
  • 2 Red

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

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

示例3:

  • 4 Black
  • 4 White
  • 1 Red
  • 1 Green

结果:BWRBWBGWBW

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

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

1 个答案:

答案 0 :(得分: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在第3个示例中也要求红色和绿色尽可能地远,所以要实现这一点,我们将不得不稍微改变算法。我们将不得不根据它们的尺寸对这些组进行排序,并在传播它们时在颜色之间进行迭代。所以在第3个例子中,第一组的大小为2,由红色和绿色组成。