0

我希望你一切都做得很好。我有一个有趣的问题,一直困扰着我。它是关于以精确的顺​​序生成组合。例如,我有 4 个变量(可以变化),这 4 个变量有一些增加的限制,例如在这种情况下 2。所以我想按以下顺序生成 2d 矩阵:


0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 1 0 0
1 0 1 0
1 0 0 1
0 1 1 0
0 1 0 1
0 0 1 1 
1 1 1 0
0 1 1 1
1 1 1 1 
2 0 0 0
0 2 0 0
0 0 2 0
0 0 0 2
2 1 0 0
2 0 1 0 
......
......
and so on.

变量的数量(在这种情况下为 4)可以改变,并且最大限制(在这种情况下为 4)也可以改变。即使我也找到了所有可能的组合,但我无法按此顺序排列它们。如果有人给出答案,那就太好了。干杯!

4

1 回答 1

0

我将假设您有n 个变量,每个变量的范围都可以从 0 到b-1。你想要的只是计算以 b 为底的 n 位数字。例如,如果n = 2b = 3,那么您要生成的序列是

00
01
02
10
11
12
20
21
22

要实现这一点,请编写一个类似于以下内容的循环:(警告:未经测试的代码)

def inc(v, b):
  for i in range(len(v)):
     v[i] = v[i] + 1
     if v[i] < b:
        break
     v[i] = 0
def is_zero(v):
   for i in range(len(v)):
      if v[i] != 0:
         return False
   return True

v = [0, 0, 0]
b = 3
while True:
  print(v)
  inc(v, b)
  if is_zero(v):
     break

如果你仔细看看它是如何工作的,你应该看到如果你的变量有不同的上限,你应该如何概括它。

于 2014-08-01T06:44:10.420 回答