免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖
这个问题可以变形成如下的或许更简单的问题。

求 $n_1$ 个 $A$, $n_2$ 个 $B$, $n_3$ 个 $C$ 的所有使$A,B,C$ 不与自己相邻的排列的个数 ...
业余的业余 发表于 2019-2-12 21:06

是的,先不必考虑同类节目的顺序,最后再乘回 n1!n2!n3! 就是了。
这样连楼主的代码也可以简化不少,比如:
  1. {n1, n2, n3} = {3, 2, 1};
  2. lstall = Join[ConstantArray[a, n1], ConstantArray[b, n2], ConstantArray[c, n3]];
  3. DeleteCases[Permutations[lstall], {___, a, a, ___} | {___, b, b, ___} | {___, c, c, ___}]
  4. % // Length
  5. %*n1!*n2!*n3!
复制代码
不过也没啥用,因为用全排列列出来再删除太bao力了,别说很大的数,我就试下 {n1, n2, n3} = {6, 6, 6} 都卡死。
至于数学的解法,楼上的就很 nice,相应的编程应该也不难吧。
我暂时还没什么更好的想法……
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

返回列表 回复 发帖