Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建唯一宾果面的算法_C#_.net_Algorithm - Fatal编程技术网

C# 创建唯一宾果面的算法

C# 创建唯一宾果面的算法,c#,.net,algorithm,C#,.net,Algorithm,有没有人知道一种算法可以生成独特的宾果纸牌?我希望用C语言实现这个算法 谢谢,获得5套,其中15个数字,第一套为1-15,第二套为16-30。。。 在集合1、2、4、5中选择5个不同的数字 在集合3中选择4个不同的数字 检查该卡是否已存在 检查每个现有卡的左上角是否与新卡对应 如果两个数字相等,则移动到第二个数字 如果你在同一个地方得到24倍的相同数字,那么这两张卡是相等的,新卡必须被拒绝这是一个有趣的问题,但正如Michael Madsen报告的那样,考虑到可能性的数量,你可能最好随机生成它们

有没有人知道一种算法可以生成独特的宾果纸牌?我希望用C语言实现这个算法


谢谢,

获得5套,其中15个数字,第一套为1-15,第二套为16-30。。。 在集合1、2、4、5中选择5个不同的数字 在集合3中选择4个不同的数字

检查该卡是否已存在 检查每个现有卡的左上角是否与新卡对应 如果两个数字相等,则移动到第二个数字
如果你在同一个地方得到24倍的相同数字,那么这两张卡是相等的,新卡必须被拒绝

这是一个有趣的问题,但正如Michael Madsen报告的那样,考虑到可能性的数量,你可能最好随机生成它们,然后检查是否有重复的。除非你想产生所有111万亿的可能性,我希望你有数据存储空间

下面是一个函数,用于从给定范围生成随机整数子集,您可能会发现它很有用:

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;
        }
    }
}

不过这可能是专利。@dtb:我授予你年度轻描淡写奖:你在一个专利网站上链接到一项专利,然后警告这个想法可能是专利的。heheNote指出,有111007923832370565张可能不同的宾果卡,假设美国卡每列3003次排列,中间一列1365次排列。获得副本的机会非常小。在这里,我认为算法无法获得专利。插件注释:我提供的可能的宾果卡数量仅适用于您将“唯一”定义为包含不同数字的情况,而忽略列中的顺序。如果你认为两个卡不同,即使只有列排序是不同的意思,1,2,3,4,5不同于5 4 3 2 1,可能的卡的数量达到一个高达55 24464 74061128648 6016000。这是552亿美元,或者是半个八百亿多一点。也许你可以想出一个函数来唯一地散列宾果卡,而不必比较每一个值?最终做了一些与你上面建议的略有不同但大致相同的事情,并使用字典对5列的模式进行散列,将每列减少为一个值15个数字中5个数字的排列,在性能和内存使用方面似乎都很好。我不确定它是否更有效,因为在if解决方案中,在最佳情况下有1个比较,而在if解决方案中,您总是要散列24个数字。这将是正确的,做一点分布概率,除非你产生大量的卡,我怀疑你会有那么多的碰撞