c# - 计算组合数以形成 100 的算法

标签 c# algorithm scala

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

那些是

  • 组合数
  • 乘数
  • 距离

示例输入 1:(2-10-20)

意思是

  • 列出构成 100 的有效 2 路组合。
  • 组合之间的距离应小于或等于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]

如果您指引我走向正确的方向,我将不胜感激。

干杯。

最佳答案

希望不是作业题!

    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

关于c# - 计算组合数以形成 100 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510586/

相关文章:

scala - Scala 2.10反射,如何从案例类中提取字段值,即案例类中的字段列表

scala - 在现有项目中安装ensime无法解决依赖关系

c# - 查询相同数据上下文时得到不同结果

algorithm - 如何自动完成包含空格的名称?

python - 查找 NxN 棋盘中与给定索引相邻的所有索引

java - 排序算法

Scalaz 7 Iteratee 处理大型 zip 文件(OutOfMemoryError)

C# 异步任务 <IActionResult> 返回对象

c# - 选择对象列表中对象的属性,该对象也在另一个对象列表中

c# - 霍纳算法