片段是
for(int i=0;i<n;i++)
for(int j=n-1;j>=i;j--)
System.out.println(i + " " + j);
我的答案是,对于 i
的第一个,i=0
和内部循环 (int j=n-1;j>=0; j--)
会执行n次,对于第2个i
,i=1
,内层循环会执行n-1次。而对于第(n-1)次i
,i=n-2
,内循环会执行2次,而对于最后一次 i
,i=n-1
,所以内层循环会执行1次。
将它们相加n+(n-1)+(n-2)+...+2+1=n(n+1)/2
。
但是课本上的答案是n(n-1)/2
,那我的答案有什么问题呢?
最佳答案
您基本上是在打印从 1 到 n 的 2 个数字的每个组合,而不考虑顺序的重要性和重复(相同的元素可以选择两次)。
有 C(n,2) + n = n!/((n-2)!2!) + n = n(n-1)/2 + n = n(n+1)/2
这样的可能性,其中 n
是元素的数量。
- C(n,2) - 从 n 个元素中选择 2 个元素,不重复
- n - 所有可能的重复项
关于java - 这段输出语句执行了多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616391/