【发布时间】:2012-01-26 10:26:32
【问题描述】:
我的朋友邀请我回家玩秘密圣诞老人的游戏,我们应该在其中抽签并为小组中的朋友扮演“圣诞老人”的角色。
所以,我们写下我们所有的名字并随机选择一个名字。如果我们中的任何一个人最终选择了自己的名字,那么我们重新洗牌并重新选择名字(理由是不能成为自己的圣诞老人)。
我们有七个人在玩,所以我认为最终的“圣诞老人分配”是 (1:7) 对自身的排列,但有一些限制。
我想就如何使用 Mathematica 或任何编程语言甚至算法提出各种想法:
- 列出/打印出所有“有效”的圣诞老人分配
- 随着玩“秘密圣诞老人”的朋友数量的增长而扩展
【问题讨论】:
-
原谅我的无知,但这不只是解决到7! ?可能性的数量。不是那些的确切内容。
-
@Sheriff 不,它没有。他要求的是不留下任何元素的排列。对于三个元素,(123)(132)(321)(213)被拒绝,(231)和(312)都可以。
-
@Sheriff,是的,确实如此。嗯!将是排列的总数,但是,其中一些将是“无效的”并且需要考虑。简单的规则是,如果人“i”选择“i”,那么这个“排列”是无效的。如果 1,2,3,..n 是人 & P(1), P(2)..P(n) 是他们选择的插槽,那么对于每个 1
-
@Szabolcs -- 是的,你是对的!
-
致亲密的选民:这就是Mathematica users want their own stack exchange site的原因。
标签: algorithm wolfram-mathematica permutation combinatorics