0

皆さんが素晴らしいことをしていることを願っています。興味深い質問があります。正確な順序で組み合わせを生成することについてです。たとえば、私は 4 つの変数 (変化する可能性があります) を持っており、これらの 4 つの変数には、たとえばこの場合 2 のように増加する制限があります。


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 = 2およびb = 3の場合、生成するシーケンスは次のようになります。

00
01
02
10
11
12
20
21
22

これを実装するには、次のようなループを記述します: ( warning : untested code)

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 に答える