查找或安排给定数字的所有组合

时间:2014-07-31 20:55:24

标签: c math matrix combinations arrangeoverride

我希望你们所做的一切都很棒。 我有一个有趣的问题,这个问题困扰着我。它关于以精确的顺​​序生成组合。 例如,我有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)也可以变化。 即使我也找到了所有可能的组合,但我无法按此顺序排列它们。 如果有人给出答案,那就太棒了。 干杯!

1 个答案:

答案 0 :(得分:0)

我假设你有 n 个变量,每个变量都允许从0到 b-1 。你想要的只是计算基数b中的n位数字。例如,如果 n = 2 b = 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

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