2016-09-10 13 views
-5

私はこのコードの数式を見つけようと多くの時間を費やしましたが、まだ何も..実行時間は分かっていますが、実際にはn = 100の場合、出力のこのコードは印刷されますか?カウントを得るための特定の式はありますか?私がやったコード:ループの繰り返しを数えるための数式

int i, j, k; 

for (i = 1; i <= n; i++) { 
    for (j = i + 1; j <= n; j++) { 
     for (k = j + 1; k <= n; k++) { 
      System.out.println(i + " " + j + " " + k); 
     } 
    } 
} 
+0

"FORMULA"とは何ですか?問題の声明は何ですか?ところで、上記のコードの実行時の複雑さは$ O(n^3)$です。 –

+0

上記のコードが何行出力するのか調べるには、どうすればよいでしょうか? – AhmedLo

+1

複数の「i * j * k」 –

答えて

2

私はあなたがネストされたループがする反復の数を取得するためにを必要としている感覚を持っています。これらのループについて

for(i = 1; i <= n; i++) 
    for (j = i+1; j <= n; j++) 
     for(k = j+1; k <= n; k++) 

、反復回数は次のようになります。上記の種類のネストされたループの

(n*(n-1)*(n-2))/6, where n > 2. 

一般式

ここ
(n*(n-1)* ... *(n-r+1))/r!, where n > r-1. 

、ネストされたループのR =数

たとえば、n = 20、r = 3の場合、反復は=(20 * 19 * 18)/ 3になります。 = 1140

+0

私は十分にあなたに感謝することはできません、文字通りこの式にパターンを把握しようと5時間を過ごした。もう1つ、これは合計ルールの1つです。 – AhmedLo

+1

私は、(n *(n-1)*(n-2))/(!3)を入れたいと思っています。今、私は総和ルールが何であるかわかりませんが、これはn = 5、count = 3 + 2 + 1 + 2 + 1 + 1 –

+0

@AhmedLoはい、種類のことを言うのと同じですから正しいと思います。 – Shahid

0

厳密に、私< J < K。さらに、 1≦i < j < k≦nです。
つまり、印刷される行数は、n個の数値の合計集合から3つの異なる数の異なる順序のない集合の数です。ここから続けることができます。

ヒント:組み合わせ

+0

はコンビネーションについて考えましたが、数式に..? – AhmedLo

+0

Erm ...組み合わせ式を使用しますか? –

関連する問題