我有几组彩色硬币。每一组都有一些硬币,它们可能与其他硬币相同,也可能不同。
我想把所有的硬币放在一个数组中,有一个约束条件:我希望分配尽可能的规则。这将被用来画一条更大的线与每种颜色的确切比例。
例1:
2黑
2白色
1红色
结果:B W R B W
例2:
49黑色
49白色
2红色
结果:(bw)x12 r(bw)x25 r(bw)x12
结果是黑白分明,两枚红色硬币分别出现在~25和~75的位置(也就是说它们距离50很远)。
例3:
4黑色
4白色
1红色
1绿色
结果:bwrbwbwbwbw
绿色和红色的硬币也“很远”。
注:这个问题已经被“减少”(即从来没有50个黑色和50个白色硬币:这个案例被简化为2个硬币:1个黑色和1个白色)。
最佳答案
一个简单的方法是洗牌所有的硬币,然后把它们随机地放入数组中——如果有足够的硬币,这将是正常的。
另一种方法是将硬币从最小的一组转到最大的一组,并尽可能均匀地分布硬币让我们看第二个例子:你把红色放在每个100 / 2 = 50
的地方:
R _ _ _ ... R _ _ _ ... _ _ _
然后取白色并将其放入从第一个索引开始的每个
(100 - 2) / 49 = 2
索引中:R W _ W _ ... R W _ W _ ... _ W _
等等,黑色的every
(100 - 2 - 49) / 49 = 1
索引:R W B W B ... R W B W B ... B W B
好啊。。。现在我看到,在第三个例子中,OP还要求红色和绿色尽可能远,因此要实现这一点,我们必须稍微改变算法我们将不得不根据它们的大小和颜色之间的迭代来排列它们所以在第三个例子中,第一组是2号,由红色和绿色组成。
关于arrays - 建立具有固定颜色的常规图案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16735722/