我正在尝试制作一个程序来随机化一个事件的条目。我的程序运行良好,可以输入条目,但我坚持随机化它。
我有2个名单,我们叫一个头,另一个叫脚跟。我的列表如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1a, 2a, 3a, 4a, 5a, 6a, 7a, 8a, 9a, 10a]
我希望Head中的每个项目都有来自Heel的2个随机合作伙伴,但Heel的任何值都不能超过两次。在最终输出中,每个条目应该列出两次而且只列出两次。
希望有人理解并且能够帮助我,谢谢。
答案 0 :(得分:1)
var head = new List<char>("abcdef");
var heel = new List<char>("123456");
heel = heel.Concat(heel);
var randomer = new Random();
foreach (var knownItem in head)
{
var idx1 = randomer.Next(heel.Count);
var pair1 = heel[idx1];
heel.RemoveAt(idx1);
char pair2='\0';
while (true)
{
var idx2 = randomer.Next(heel.Count);
pair2 = heel[idx2];
if (pair2 != pair1)
{
heel.RemoveAt(idx2);
break;
}
}
//DoTheDew
}
明天的后续步骤:dieharder测试此版本与@Arj的结果
答案 1 :(得分:0)
这是一个可能的解决方案。由于没有代码可以开始,我现在已经用伪代码完成了。
heel
中的所有值;称他们为heel1
和heel2
i
中的每个元素head
:
j
的随机数0 <= j < heel1.size
。删除heel1[j]
处的元素 - 这是您的第一个配对heel2
(针对不同的生成j
)。在heel2[j]
删除该元素 - 这是第二个配对i
与两个已删除的值一起存储最后,head
中的每个值都有两个数字,脚跟的值不会超过两次。由于我们每次都删除任何使用过的值,因此我们不需要检查您的&#34;超过两个配对&#34;规则。