我遇到了编程工作,我遇到了困难。 其描述如下:
有一个名叫秘密圣诞老人(给他们礼物)的游戏,其中有多少孩子参加。对于每个参与的孩子,都有来自参与孩子的秘密圣诞老人朋友。 我必须为每个参与的孩子编写一个选择秘密圣诞老人朋友的程序。
实施例: 如果鲍勃,爱丽丝,约翰和乔治正在参加小孩,随机选择后 输出可能看起来像
Kid Secret Santa
Bob ---------- John
Alice--------- Bob
George-------- Alice
John---------- George
连续两次运行相同输入的程序不应该有相同的结果。
我的想法是:(基于C的实施)
这是正确的方法吗?它会浪费整数数组的额外空间。 任何人都可以帮我找到更有效的解决方案(最小化空间利用率)。
答案 0 :(得分:3)
您不需要两个阵列 - 您需要一个阵列。您要查找的正式名称是Random Permutation。有多种众所周知的算法 - 例如,Fisher–Yates shuffle。
您的问题的算法如下:
N
N
项目数组N-1
填充i
的排列成员未设置为i
)例如,如果N
为4,则排列为1, 3, 0, 2
,则分配如下:
0. Bob ---------- Alice .1
1. Alice --------- John .3
2. George -------- Bob .0
3. John ---------- George .2