从 ABCDEFG 7 个 字母 中 每次 取 5 个 字母 作为 组合, 允许 相同 的 字母 重复 出现, 问 有 多少种 组合 ? 可以的话, 列出 这些 组合 。
允许相同 的 字母 重复出现, 比如 AABBC 、ABABC 、CCCCD 、DFGGG , 注意, 因为 组合 不区分 元素顺序, AABBC 和 ABABC 是 同一个 组合 。
这题 出自 《排列组合》 https://www.cnblogs.com/KSongKing/p/13193086.html 。
本文 已 发到了 反相吧 《出一道题 : 计算 一个 组合》 https://tieba.baidu.com/p/6935299100 , 下面 记录 帖 里 的 一些 讨论回复 。
11 楼
incinc :
还可以相同的字母出现,这就不是题目中的“7 个 字母 中 每次 取 5 个 字母 作为 组合”的问题了,而应该是另一个种组合问题了。
题面出得有问题,因为组合问题的前提已经定义为7个ABCDEFG字母,而这7个字母不可能再成为可以重复的字母出现了。
12 楼
incinc :
如果“7个字母中可以重复”,则是每一个字母可以出现7次,相对于7*7=49个元素了,
而从这49个元素进行“每次取5个字母作为组合”,则: C(49,5)=49!/5!*(49-5)!
incinc: 吓住了,共有1,906,884。
13 楼
ylyyjjlh2 :
我编了个程序,把所有组合都列出来,楼主你看一下,有遗漏或重复吗?
15 楼
回复 11 楼 12 楼 incinc
inc 吧主 的 思路 很有 启发 , 我改了一下, 7 * 5 = 35,
从 35 个 元素 中 取 5 个 作为 组合, 这样得到的 组合 个数 是不是 1 楼 题目 的 答案 ?
还是 有问题, 这样 还是 会 把 一部分 组合 重复 算进去 。
16 楼
回复 13 楼 ylyyjjlh2 ,
层主 的 算法 看起来 是 对 的 , 比如 从 AAAAA , AAAA , AAA, AA, A 开始 循环组合,
有 AAABB, 但是 到 BB 的 时候 , 就没有 A, 而是 从 BBCCC 开始,
以 A 循环 的 时候, 用 B 和 之后 的 字母 参与 匹配,
以 B 循环 的 时候, 用 C 和 之后 的 字母 参与 匹配,
以 C 循环 的 时候, 用 D 和 之后 的 字母 参与 匹配,
……
而 用 字母 匹配 的 过程, 又 使用 上述 的 过程, 如此 递归 。
这个 算法 应该 是 对的 。
这个 算法 的 特色 是 递归, 但 也因为此, 要把 这个 算法 写成 公式 比较 困难 。
另外, 你 递归 次数 太多, 堆栈 没有 溢出 吗 ?
17 楼
接 16 楼 ylyyjjlh2 ,
这个 题 可以 用 纯 循环 程序 实现, 也可以写出 对应 的 公式, 这个 循环算法 有一部分 也 参考了 你的 递归算法 。
你的 结果 是 462, 递归次数 估计 在 1 万次 左右 。
受 你的 这个 递归程序 启发 挺多 的 , 哈哈哈 。