4项:
A
B
C
D
Run Code Online (Sandbox Code Playgroud)
可能有6对独特的:
AB
AC
AD
BC
BD
CD
Run Code Online (Sandbox Code Playgroud)
如果我有100个起始项怎么办?有多少独特的对?有没有一个公式,我可以把它扔进去?
Mik*_*sen 61
你要找的是n选择k.基本上:
对于每对100个项目,您将拥有4,950个组合 - 提供顺序无关紧要(AB和BA被视为单一组合)并且您不想重复(AA不是有效对).
小智 48
TLDR; 式是n(n-1)/2
其中n
是在该组的物品的数量.
要查找一组,其中对受独特的对数交换律 (AB = BA)
,就可以计算出总和的1 + 2 + ... + (n-1)
地方n
是在设定项目的数量.
推理如下,比如你有4个项目:
A
B
C
D
Run Code Online (Sandbox Code Playgroud)
可以配对的项目数量A
为3,或者n-1
:
AB
AC
AD
Run Code Online (Sandbox Code Playgroud)
由此可见,可与配对的项目数B
是n-2
(因为B
已经配对A
):
BC
BD
Run Code Online (Sandbox Code Playgroud)
等等...
(n-1) + (n-2) + ... + (n-(n-1))
Run Code Online (Sandbox Code Playgroud)
这是一样的
1 + 2 + ... + (n-1)
Run Code Online (Sandbox Code Playgroud)
要么
n(n-1)/2
Run Code Online (Sandbox Code Playgroud)
Jon*_*oni 34
这就是你可以自己解决这些问题的方法:
该对中的第一个可以以N(= 100)方式挑选.您不想再次选择此项目,因此可以以N-1(= 99)方式选择该对中的第二个.总共可以从N(N-1)(= 100*99 = 9900)不同的方式中选择N个中的2个项目.
但是坚持下去,这样你也算不同的顺序:AB和BA都被计算在内.由于每对被计数两次,您必须将N(N-1)除以2(您可以订购两个项目列表的方式的数量).使用一组N可以制作的两个子集的数量则为N(N-1)/ 2(= 9900/2 = 4950).
我正在解决这个算法并陷入对部分的困境。
这个解释对我很有帮助 https://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/
所以要计算一系列数字的总和:
n(n+1)/2
Run Code Online (Sandbox Code Playgroud)
但是你需要计算这个
1 + 2 + ... + (n-1)
Run Code Online (Sandbox Code Playgroud)
所以为了得到这个,你可以使用
n(n+1)/2 - n
Run Code Online (Sandbox Code Playgroud)
这等于
n(n-1)/2
Run Code Online (Sandbox Code Playgroud)