pythonで書かれた例については、3.1のitertools.combinations_with_replacementを参照してください。さらに、コンビナトリアルでは、コンビネーションと交換の問題を、2.6 itertoolsに既に組み込まれている通常のコンビネーション交換なしの問題に変換するのが一般的です。これには、製品または置換に基づくソリューションのように、破棄されたタプルを生成しないという利点があります。あなたの例では(A、N)という標準(n、r)の用語を使った例です。
import itertools, operator
def combinations_with_replacement_counts(n, r):
size = n + r - 1
for indices in itertools.combinations(range(size), n-1):
starts = [0] + [index+1 for index in indices]
stops = indices + (size,)
yield tuple(map(operator.sub, stops, starts))
>>> list(combinations_with_replacement_counts(3, 8))
[(0, 0, 8), (0, 1, 7), (0, 2, 6), (0, 3, 5), (0, 4, 4), (0, 5, 3), (0, 6, 2), (0, 7, 1), (0, 8, 0), (1, 0, 7), (1, 1, 6), (1, 2, 5), (1, 3, 4), (1, 4, 3), (1, 5, 2), (1, 6, 1), (1, 7, 0), (2, 0, 6), (2, 1, 5), (2, 2, 4), (2, 3, 3), (2, 4, 2), (2, 5, 1), (2, 6, 0), (3, 0, 5), (3, 1, 4), (3, 2, 3), (3, 3, 2), (3, 4, 1), (3, 5, 0), (4, 0, 4), (4, 1, 3), (4, 2, 2), (4, 3, 1), (4, 4, 0), (5, 0, 3), (5, 1, 2), (5, 2, 1), (5, 3, 0), (6, 0, 2), (6, 1, 1), (6, 2, 0), (7, 0, 1), (7, 1, 0), (8, 0, 0)]
、シンプルでエレガントな再帰... 1 :) –
ゾルのためにスキップしています:私はまだanderstandしようとしている:OD すべての可能性を列挙していないので、私は間違いを見つけています。 def列挙する(ボール、ボックス、ボックス): if Boxes <= 0: print "Error" elifボックス== 1 :範囲(ボール)におけるBの : ボックス[0]ボールを プリントボックス他 =印刷B ボックス[ボックス-1] = B 列挙(ボール-B、ボックス-1、BOITE) プリントボックス リターン ### MAIN = 2 ボックス= [0] * 3 プリントボックス 列挙(= 3個の ボール###ボックス2,3、box) –
擬似コードは使用しないでください。あなたの解決策は間違っていると思いますが、Box [1] = Ballsの意味を理解できないので、実際にはそれを批判することはできません。擬似アレイは1つの索引付けされた索引付き索引付き索引か、 "ボックス"とは何ですか? "PrintBoxes"とは何ですか? – Glyph