片段是
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次,而i
的第二个i=1
执行i
1}},内循环将执行n-1次。对于i=n-2
,i
的(n-1)次,内部循环将执行2次,而i=n-1
的最后一次执行n+(n-1)+(n-2)+...+2+1=n(n+1)/2
,所以内循环将执行1次。
将它们加在一起n(n-1)/2
。
但是教科书的答案是{{1}},那我的答案有什么不对?
答案 0 :(得分:1)
你基本上打印从1到n的2个数字的每个组合,没有顺序的重要性和重复(相同的元素可以选择两次)。
C(n,2) + n = n!/((n-2)!2!) + n = n(n-1)/2 + n = n(n+1)/2
有这样的可能性,其中n
是元素的数量。
答案 1 :(得分:0)
您确定您的教科书代码不是
for(int i=0;i<n;i++)
for(int j=n-1;j>i;j--)
...
根据答案,这会给你(n-1)n/2
。
如果没有,并且您的代码与本书完全一致,那么您是正确的 - 您只是选择所有可能的替换对,因此它是(n+1)n/2