我正在组织一个“秘密圣诞老人”活动,而不是通过抽签来做无聊的方式,我把它变成了一个教育练习,并使用一些 matlab 代码进行配对。最终结果意味着列表中的每个人都被要求为列表中的另一个人购买礼物。Codewise,问题归结为“从这个人列表中,选择一个不是你并且没有被其他人选中的人”。
我有一些有效的代码,但它不是很健壮(如果有奇数人,可能形成无限循环)。我也怀疑它不是“真正的”随机的。还有更好的方法吗?
names = {'Alice' 'Bob' 'Carol' 'Dave' 'Esther' 'Frank'};
picklist = names;
c = numel(names)
pairs = cell(c,2);
for ii = 1:c
pairs(ii,1) = names(ii);
match = 1;
while (match == 1)
d = ceil(rand(1)*c);
if ((strcmp(picklist(d),names(ii)) == 0) && (strcmp(picklist(d),'picked') == 0))
pairs(ii,2) = picklist(d);
picklist(d) = {'picked'};
match = 0;
end
end
end
pairs