閉じたフォームがなぜあるのかについてのカウント引数は次のとおりです。
(10 + (number of loops - 1)) choose (number of loops)
ループの数が 3 で、イテレータが 3 つある場合を考えてみましょう。アルゴリズムの実行中の反復子の値を視覚化します。厳密に言葉にするのは難しいですが、うまくいけば、これが役に立ちます:
0 | | | 1 2 3 4 5 6 7 8 9
0 | | 1 | 2 3 4 5 6 7 8 9
0 | | 1 2 | 3 4 5 6 7 8 9
...
0 | 1 | | 2 3 4 5 6 7 8 9
0 | 1 | 2 | 3 4 5 6 7 8 9
0 | 1 | 2 3 | 4 5 6 7 8 9
...
0 1 | | | 2 3 4 5 6 7 8 9
0 1 | | 2 | 3 4 5 6 7 8 9
...
0 1 2 3 4 5 6 7 8 9 | | |
これは文字どおり 12 個のスロット (一番左のスロットは常に 0) を持つのと同じで、イテレータ用に 3 つのスロットを選択[1-9]
し、残りを. たとえば、可能な選択肢の 1 つは{0, 5, 7}
、これらのスロットのそれぞれに 1 つのイテレータを配置し、次に 1 から 9 の数字を順番に配置することです。
Slots: 0 1 2 3 4 5 6 7 8 9 10 11
0 | 1 2 3 4 | 5 6 | 7 8 9
私の最大のカウントの議論ではありませんが、それはアイデアを伝えると思います.
さて、あなたの実際の質問は、その場でこれを思いつく方法でした. 短期間で閉じた形を見つけるのはかなり難しそうです。count == 2002
おそらく、彼らは、途中で見た小さな算術ショートカットを使用して、手動でそれを理解することを望んでいたのでしょうか? 手動計算を高速化する最も明白な方法は、コードの再帰的な性質を利用することです。count
1 つのループ、2 つのループ、3 つのループなどを繰り返し計算し、部分和を使用して次のステップを実行できます。つまり、次のことを意味します。
1 Loop:
10
Sum: 10
2 Loop:
10 9 8 7 6 5 4 3 2 1
Partial Sums: 1
=> 1 + 2 = 3
=> 1 + 2 + 3 = 6
=> 1 + 2 + 3 + 4 = 10
...
=> Sum: 55
3 Loop:
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1
Partial Sums: 1
=> 1 + 3 = 4
=> 1 + 3 + 6 = 10
=> 1 + 3 + 6 + 10 = 20
...
したがって、3 つのループのケースでは、2 つのループのケースの部分和を使用して合計をより速く計算できることに注意してください (常に 10 個の部分和があります)。それを 15 分以内に書き出すことは想像できますが、かなり大変です。おそらく、他の誰かが賢い洞察力で声を上げてくれるでしょう...