【问题标题】:Combinatorics in Java or pseudo code [closed]Java或伪代码中的组合[关闭]
【发布时间】:2015-01-25 19:45:06
【问题描述】:

我想在一个可能的彩票系统中生成一系列数字。每个系列由 6 个数字组成。这些数字是从包含 50 个不同数字的池中选择的。最初有 6 个号码从池中移除,这六个号码构成了累积奖金系列。数字顺序无关紧要。
现在是票系列。一个系列有六个号码,如果其中有 3 个或更多号码与头奖号码中的号码相匹配,则该系列为中奖系列。因此,如果头奖为 1,2,3,4,5,6,则可以将 1,2,3,7,8,9 或 1,2,3,4,0,19 的系列视为赢家。
现在我的问题。我想生成所有获胜的票系列(每个系列中正好有六个数字,并且其中有 3 个或更多匹配的数字)。由于顺序无关紧要,我认为数学答案是[(6选3)*(44选3)]+[(6选4)*(44选2)]+[(6选5)*( 44 选择 1)] + 1。如果我错了,请纠正我。但是,我也想知道如何最好在 Java 或一些伪代码中实现它。 提前感谢所有帮助。

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为这个网站不是为你做你的工作。当您有特定问题而不是软件要求时回来。
  • @SJuan76 这不是我工作的一部分。我是一名准备实习面试的学生。我遇到了这个问题。我不确定我怎么能更具体。你能详细说明一下吗?这是我要解决的数学问题。我要求 Java 实现(最好),因为我对此更熟悉。
  • 欢迎来到 StackOverflow。要获得更好的回复和更少的反对意见,请先浏览quick tour,然后阅读帮助中心,尤其是this 和this,然后根据这些指南发布您的问题。
  • @RealSkeptic 谢谢。我以为我在要求一种算法来解决问题。我确实先自己尝试过。这就是我提出包含的解决方案的方式。但是当我试图实现它时,我做不到。于是,我来到了这里。
  • 您找到的公式表明了生成这些集合的方法。如果您找到一种生成“六分之三”、“六分之三”、...只需将它们与“四十四之三”等结合起来。

标签: java permutation combinatorics


【解决方案1】:

这里有一些 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]

【讨论】:

  • 非常感谢。真的很感激。
猜你喜欢
  • 2013-08-23
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多