我遇到了一个棘手的情况,我需要根据不同的因素计算形成 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/