algorithm - 用户放置轮换算法

标签 algorithm

我正在尝试提出一种算法,将用户“Q”、“W”、“E”和“R”分配到不同的队列位置(列“A”、“B”、“C” , "D") 在任务的每次迭代之后。我试图手动解决这个问题(使用不同的组合)但不能,所以我显然有一个概念问题(或者在我的限制条件下不可能有理想的解决方案)。任何帮助/提示表示赞赏。如果您对代码有任何建议,请随意使用任何语言。

谢谢!

我有一些限制:

  • 用户(Q、W、E、R)在每次迭代中都换类。
  • “D”列中的用户不能放在下一个“A”列中 迭代。
  • 用户“E”不能放在“A”列中。
  • 用户“Q”、“W”和“R”的分布应尽可能均等 在所有列中(这意味着,例如,用户“Q”不应该在 任何一列的次数明显多于用户“W” 和“R”)。

         A     B     C     D
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

最佳答案

经过反复试验,我认为这行得通吗?

        A     B     C     D

     1  Q     W     R     E
     2  R     Q     E     W
     3  Q     E     W     R
     4  W     R     Q     E
     5  Q     W     E     R
     6  W     E     R     Q
     7  R     Q     W     E
     8  W     R     E     Q
     9  R     E     Q     W
    10  Q     W     R     E (repeats from 1 on)

我首先创建了三行旋转 Q、W 和 R。

QWR
WRQ
RQW

然后将这三行放在彼此下面三层,在 D 列中插入一次 E,在 C 列中插入一次,在 B 列中插入一次。

QWRE
WRQE
RQWE

QWER
WREQ
RQEW

QEWR
WERQ
REQW

然后最后手动打乱这九行,直到满足前两个要求。

关于algorithm - 用户放置轮换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29083397/

相关文章:

algorithm - 尝试算法的媒介?

algorithm - Haskell 中的递归再次混淆 - 包含测试的子集

c# - 下面代码的时间复杂度

c - 最小-最大选择——那是什么算法?

algorithm - 如何在基于时间的模拟游戏中防止基于时间的作弊?

javascript - 合并两个数组时检查哪个元素更大?

java - 给定数百万个点,找到位于直线上或距直线 0.2 mm 范围内的点

algorithm - 概率空间和预期运行时间 : what are they?

ruby - 欧拉计划 1 :Find the sum of all the multiples of 3 or 5 below 1000

algorithm - 首先检查 iPad 序列号是否正确