ネストされた一連の 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
アップデート
上記は少し最適化できますが、最終的には一般的な解決策ではなく、特定の解決策になります。
これは常に true であることがわかります。そのため、への代入で呼び出し(a+1) >= 1
を取り除くことができます。同様に、は常に真であるため、 への代入を単純化できます。 max
b
(c+1) >= 20
d
の最大可能値が 540 であることもわかりますa + b + c + d
。これにより、 の最小可能値は 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