有谁知道可以生成独特的宾果卡面的算法?我想在C#中实现这个算法。
谢谢,
答案 0 :(得分:4)
获得5组,每组包含15个数字(第1组为1-15,第2组为16-30 ......)
在1,2,4,5中设置5个不同的数字
在第3组中选择4个不同的数字
检查该卡是否已存在
检查每张现有卡的左上角是否与新卡相对应
如果两个数字相等,则移至第二个数字
如果你在同一个地方得到相同数字的24倍,那么两张卡都是相同的,必须拒绝新卡
答案 1 :(得分:0)
这是一个有趣的问题,但正如迈克尔·马德森所报告的那样,考虑到可能性的数量,你可能会更好地随机生成它们并且 之后,检查你是否有重复。 (除非您想要生成所有111个千万亿次的可能性,我希望您有数据存储空间!)
答案 2 :(得分:0)
这是一个用于生成给定范围内的整数的随机子集的函数,您可能会发现它很有用:
private static IEnumerable<int> RandomSubsetOfRange(int min, int max, int count)
{
Random random = new Random();
int size = max - min + 1;
for (int i = 0; i <= size; i += 1)
{
if (random.NextDouble() <= ((float)count / (float)(size - i + 1)))
{
yield return min + i;
count -= 1;
}
}
}