2012年(158)
分类: C/C++
2012-11-23 15:53:04
● ○● |
○ ●● |
● ●○ |
○○ ○ ● ●● |
○● ○ ○ ●● |
●○ ○ ○ ●● |
●○ ○ ● ●○ |
……
把“空座“和“人”互换一下,并不会影响结果,所以人有几种排列,那么空座位就有几种排列。因此
f(m,n) 应当等于
f(m,m-n),这是最基本的,可以用它先过滤一下答案。
------
2007-05-12日记
谢谢大家,我就不一个个回复了。
如果不是一个圈,而是一个排,那么这就非常简单:m! / (n!) /
(m-n)!
如果是一个圈,自然会认为是 m! / (n!) / (m-n)! / m
,然而这是错误的,举例来说: 4张椅子2个人往上坐
如果是一个排,有如下六种排列
●●○○
●○●○
●○○●
○●●○
○●○●
○○●●
按圈分,可以分成2组
●●○○
○●●○
○○●●
●○○●
和
●○●○
○●○●
,前4种在圈中属于同一种,后2种在圈中属于同一种,也就是每种排列的重复次数并不都相同,除以什么都不会正确,随着m和n越大,那些讨巧的做法,比如取绝对值呀,等等都将失效。
------
2007-10-11 记 ------ 一个可能正确的答案: http://blog.vckbase.com/Files/bruceteen/permutation.zip