Java或伪代码中的组合数学

Java或伪代码中的组合数学,java,permutation,combinatorics,Java,Permutation,Combinatorics,我想在一个可能的彩票系统中生成一系列数字。每个系列由6个数字组成。这些数字是从50个不同的数字中选择的。最初,从池中删除6个号码,这6个号码将成为中大奖系列。数字的顺序并不重要。 现在是门票系列。一个系列有六个号码,如果其中有3个或更多号码与头奖号码中的号码匹配,则该系列为中奖系列。因此,如果头彩是1,2,3,4,5,6,例如,一系列1,2,3,7,8,9或1,2,3,4,0,19可以被视为中奖者。 现在是我的问题。我想生成所有的彩票系列,每一张都有六个数字,其中有三个或更多匹配的数字。由于顺序

我想在一个可能的彩票系统中生成一系列数字。每个系列由6个数字组成。这些数字是从50个不同的数字中选择的。最初,从池中删除6个号码,这6个号码将成为中大奖系列。数字的顺序并不重要。 现在是门票系列。一个系列有六个号码,如果其中有3个或更多号码与头奖号码中的号码匹配,则该系列为中奖系列。因此,如果头彩是1,2,3,4,5,6,例如,一系列1,2,3,7,8,9或1,2,3,4,0,19可以被视为中奖者。 现在是我的问题。我想生成所有的彩票系列,每一张都有六个数字,其中有三个或更多匹配的数字。由于顺序不重要,我认为数学答案是[6选择3*44选择3]+[6选择4*44选择2]+[6选择5*44选择1]+1。如果我错了,请纠正我。但是,我也想知道如何更好地用Java或一些伪代码实现它。
提前感谢您的帮助。

这里有一些Haskell代码,因为您对Java感兴趣,可能可以作为伪代码使用

-- Return a list of tickets drawn from the numbers in nums
-- having length n and at least k numbers in common with jackpot.
winners :: Int -> Int -> [Int] -> [Int] -> [[Int]]
winners n k jackpot nums = go n k (length jackpot) nums
  where
    -- needed = count of numbers needed to fill a ticket
    -- jneeded = count of jackpot numbers needed for a winner
    -- jleft = count of jackpot numbers left in the list nums
    -- nums = remaining numbers to pick from
    go :: Int -> Int -> Int -> [Int] -> [[Int]]
    go needed jneeded jleft nums
      | needed <= 0                = if jneeded <= 0 then [ [] ] else []
      | jneeded > jleft            = []
    go needed jneeded jleft []     = []
    go needed jneeded jleft (d:ds) = useD ++ dontUseD
        where
          jneeded' = if elem d jackpot then jneeded-1 else jneeded
          jleft'   = if elem d jackpot then jleft-1   else jleft
          useD     = map (d:) $ go (needed-1) jneeded' jleft' ds
          dontUseD = go needed jneeded jleft' ds

example = print $ winners 4 2 [2,5,8] [1..9]

我投票结束这个问题作为离题,因为这个网站不是为你做你的工作。有具体问题而不是软件需求时请回来。@SJuan76这不是我工作的一部分。我是一名准备实习面试的学生。我遇到了这个问题。我不知道怎样才能更具体。你能详细说明一下吗?这是我想解决的一道数学题。我要求最好使用Java实现,因为我更熟悉它。欢迎使用StackOverflow。要获得更好的回答和更少的反对票,请先浏览,然后阅读帮助中心,尤其是和,然后根据这些指导原则发布您的问题。@realponsignist谢谢。我以为我在要求一个算法来解决这个问题。我是第一次自己尝试的。这就是我如何提出包含的解决方案的原因。但当我试图实现它时,我做不到。因此,我来到这里。你找到的公式表明了生成这些集合的方法。如果你能找到一种方法来生成六个三元组,六个四元组,。。。只需将它们与44个中的所有三个组合,等等。非常感谢。非常感谢。