例如
int count=0
for(int i=0;i<12;i++)
for(int j=i+1;j<10;j++)
for(int k=j+1;k<8;k++)
count++;
System.out.println("count = "+count);
或
for(int i=0;i<I;i++)
for(int j=i+1;j<J;j++)
for(int k=j+1;k<K;k++)
:
:
:
for(int z=y+1;z,<Z;z,++,)
count++;
所有迭代后count的值是多少?有没有计算它的公式?
答案 0 :(得分:4)
这是求和的数学问题
基本上,人们可以证明:
for (i=a; i<b; i++)
count+=1
相当于
count+=b-a
类似地,
for (i=a; i<b; i++)
count+=i
相当于
count+= 0.5 * (b*(b+1) - a*(a+1))
你可以使用例如wolframalpha(Wolfram的Mathematica)获得类似的公式
此系统将为您进行符号计算,例如,
for(int i=0;i<A;i++)
for(int j=i+1;j<B;j++)
for(int k=j+1;k<C;k++)
count++
是Mathematica查询:
http://www.wolframalpha.com/input/?i=Sum[Sum[Sum[1,{K,J%2B1,C-1}],{J,I%2B1,B-1}],{I,0,A-1}]
答案 1 :(得分:2)
不是完整的答案,但是当i,j和k都相同时(比如说它们都是 n ),公式为C(n, nb_for_loops)
,这可能已经让你感兴趣了:)< / p>
final int n = 50;
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
for (int l = k+1; l < n; l++) {
count++;
}
}
}
}
System.out.println( count );
将给予230300即C(50,4)。
您可以使用binomail系数轻松计算:
http://en.wikipedia.org/wiki/Binomial_coefficient
计算此问题的一个公式是:n! / (k! * (n-k)!)
例如,如果你想知道可以从52张牌中取出多少套不同的5张牌,你可以使用5个嵌套循环或使用上面的公式,它们都会给出:2 598 960 < / p>
答案 2 :(得分:1)
这大致是高音锥的量http://www.physicsinsights.org/pyramids-1.html =&gt; 1 / d *(n ^ d)(带d维)
该公式适用于实数,因此您必须将其调整为整数 (对于d = 2的情况(高锥体是一个三角形),1/2 *(n * n)成为众所周知的公式n(n + 1)/ 2(或n(n-1)/ 2)取决于如果你包括对角线或没有)。我让你做数学
我认为你不是一直使用n的事实,但我,J,K不是问题,因为你可以重写每个循环,因为2循环停在中间,所以它们都停止为相同的数字
公式可能变为1 / d *((n / 2)^ d)* 2(我不确定,但类似的东西应该没问题)
这不是你问题的答案,但我希望这有助于找到真正的问题。