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

确定是否可以通过合并单个分数来确定某个分数

  •  0
  • jonnybolton16  · 技术社区  · 3 年前

    假设我想要达到一定的总分 S 还有一些单独的“pots”,我可以从中获得某些单独的分数,存储为正整数列表。我想知道是否有可能在最短的时间内获得想要的分数 n_i 从大麻中尝试 i .分数累积。

    例如。

    • 我正试图得到准确的答案 S=10 要点
    • 第一罐是 [1,2] 2号锅是 [4,5,6]
    • 如果 n_1=0 , n_2=1 那就不可能了
    • 如果 n_1=1 , n_2=1 那就不可能了
    • 如果 n_1=0 , n_2=2 那就有可能了( 6 + 4 )
    • 如果 n_1=2 , n_2=1 那就有可能了( 6. + 2 + 2. )

    我正试图用python编写一段代码来解决这个问题。

    我想我应该先找到所有获得分数的组合 s 长度小于或等于 努伊 se、 g.为了 S=10, n_1=1, n_2=1 我会找到 [(10), (9,1), (8,2), (7,3), (6,4), (5,5)] (我目前不确定是否需要 (4,6) 等等),并对其进行迭代。所以 问题1:如何轻松获取这些数据? 也许是来自 itertools ?

    然后,如果你可以尝试每个罐子的次数没有限制,我只需检查组合的每个元素是否在任何一个罐子中;如果是这样,那么它是可能的,打破循环,如果不是,那么继续下一个组合;如果你尝试了所有的组合,但都没有效果,那么这是不可能的。

    这种复杂性来自于限制每罐的尝试次数; 问题2:我应该如何修改上述方法来解释这一点?

    最后 问题3:有没有其他方法可以解决这个问题?

    0 回复  |  直到 3 年前
        1
  •  1
  •   RedCocoa    3 年前

    关于问题1,是的,你应该看看 itertools.product() . 这可以让你完全按照自己的意愿组合两个列表。

    此功能还附带一个 repeat 参数,如果我理解正确,就可以解决问题2。

    最后,这些文档给出了一个替代版本,不使用itertools生成笛卡尔积,因此它们为您解决了问题3。