组合:显示所有安排

时间:2017-03-08 23:23:10

标签: python

我正试图找到一种方法来以编程方式显示n个蓝色硬币和m个红色硬币的所有排列。我知道答案是n + m C n,但我希望计算机向我显示所有n + m C n排列。只是为了澄清,如果n和m都是2,那么计算机应该给出的输出是:["bbrr", "brbr", "brrb", "rbbr", "rbrb", "rrbb"]。此外,如果可能的话,代码应该是Python。如果你没有Python,它仍然有用,因为我知道很多语言。我尝试过使用itertools,但它不起作用,因为每个红色硬币被计算为不同。我已经尝试过研究很多关于Python的可区分性而没有发现任何东西。非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

certbot --apache --email=admin@domain -d www.domain包有您要求的内容。但是,它会将相同的项目视为单独的实体,因此我们可以使用itertools来清理重复项

set()

答案 1 :(得分:1)

这是Haskell中的基本递归解决方案。

arrangements :: (Integral n, Integral m) => n -> m -> [String]
arrangements n 0 = [stimes n "b"]
arrangements 0 m = [stimes m "r"]
arrangements n m = (('b' :) <$> arrangements (n - 1) m) 
                <> (('r' :) <$> arrangements n (m - 1))

λ> arrangements 2 2
["bbrr","brbr","brrb","rbbr","rbrb","rrbb"]

λ> arrangements 2 3
["bbrrr","brbrr","brrbr","brrrb","rbbrr","rbrbr","rbrrb","rrbbr","rrbrb","rrrbb"]

答案 2 :(得分:-1)

让我们为此创建一个递归函数,

f(0,0,currentStr)= currentStr

f(n,m,currentStr)= f(n-1,m,currentStr +“b”)和f(n,m-1,currentStr +“r”)