一尘不染

计算组合数以形成100的算法

algorithm

我遇到了一个棘手的情况,我需要根据不同的因素计算形成100个组合的数量。

那些是

  • 组合数
  • 乘数
  • 距离

样本输入1: (2-10-20)

它的意思是

  • 列出有效的2种方式组合以形成100。
  • 组合之间的距离应小于或等于20。
  • 并且所有结果组合必须可被给定的乘数10整除

输出将是

[40,60]

[50,50]

[60,40]

这里[30,70],[20,60]无效,因为距离大于20。

样本输入2: [2-5-20]

[40,60]

[45,55]

[50,50]

[55,45]

[60,40]

如果您引导我朝正确的方向前进,我将不胜感激。

干杯。


阅读 296

收藏
2020-07-28

共1个答案

一尘不染

我希望这不是作业问题!

    def combinations(n: Int, step: Int, distance: Int, sum: Int = 100): List[List[Int]] =
      if (n == 1) 
        List(List(sum))
      else 
        for {
          first <- (step until sum by step).toList
          rest <- combinations(n - 1, step, distance, sum - first)
          if rest forall (x => (first - x).abs <= distance)
        } yield first :: rest
2020-07-28