一堆嵌套的 for 循环是最简单的方法。
伪代码:
let combinations = 0;
for a = 0 to 90
for b = max(a+1, 1) to 120
for c = max(b+1, 50) to 150
for d = max(c+1, 20) to 200
let e = 635 - a - b - c - d;
if max(d+1, 50) <= e <= 250
let combinations = combinations + 1
更新
上面可以稍微优化一下,但你最终会得到一个特定的,而不是一般的解决方案。
您可以观察到这(a+1) >= 1
始终是正确的,因此我们可以摆脱对 的max
调用b
。同样,(c+1) >= 20
总是正确的,因此d
可以简化分配给。
您还可以看到 的最大可能值为a + b + c + d
540,这给出了 95 的最小可能值e
。这大于规定的下限e
,所以我们只需要检查一下e >= (d+1)
。
我们最终得到:
let combinations = 0;
for a = 0 to 90
for b = a+1 to 120
for c = max(b+1, 50) to 150
for d = c+1 to 200
let e = 635 - a - b - c - d;
if d+1 <= e <= 250
let combinations = combinations + 1