代码之家  ›  专栏  ›  技术社区  ›  theburningmonk

创建独特宾果人脸的算法

  •  2
  • theburningmonk  · 技术社区  · 16 年前

    有人知道可以生成独特宾果卡人脸的算法吗?我想用C语言实现这个算法。

    谢谢,

    3 回复  |  直到 12 年前
        1
  •  4
  •   Eric    16 年前

    得到5组,每组15个数字(1-15组1,16-30组2…)
    在集合1、2、4、5中选择5个不同的数字
    在第3组中选择4个不同的数字

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

        2
  •  0
  •   Joanis    16 年前

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

        3
  •  0
  •   ICR    16 年前

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

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