Table Permutation的学生

时间:2014-02-25 14:32:40

标签: python python-2.7

我正在试图计算出32个学生按8个表分组的最大排列数,每个表4个(非重复)。这是我到目前为止所提出的,但我希望有更多的可能性(数字代表学生ID):

1   32  30  26
2   1   31  27
3   2   32  28
4   3   1   29
5   4   2   30
6   5   3   31
7   6   4   32
8   7   5   1
9   8   6   2
10  9   7   3
11  10  8   4
12  11  9   5
13  12  10  6
14  13  11  7
15  14  12  8
16  15  13  9
17  16  14  10
18  17  15  11
19  18  16  12
20  19  17  13
21  20  18  14
22  21  19  15
23  22  20  16
24  23  21  17
25  24  22  18
26  25  23  19
27  26  24  20
28  27  25  21
29  28  26  22
30  29  27  23
31  30  28  24
32  31  29  25

修改

学生必须彼此不同。请注意,例如,第1行的学生1如何再也不会遇到学生32,30或26。

我怎样才能用Python来解决这个问题?

1 个答案:

答案 0 :(得分:1)

从您显示列的方式来看,您想要做的是创建一个包含32个学生范围的列表(1,33)然后您想要移动列表以便您拥有第二个列表

l1 = range(1, 33)
l2 = shift(l1, -1)
l3 = shift(l2, -2)
l4 = shift(l3, -4)

for i in range(0:len(l1)):
  print l1[i], l2[i], l3[i], l4[i]

请注意,shift可以通过多种方式定义,包括使用collections.deque rotate()方法或

def shift(l, n):
  return l[n:] + l[:n]