数列1,2,3,4,……,n的全排列总排列数为n!种。其中,若数字k排在第k位称为“正序”,若数字k排在第k位以外的位上,称之为“逆序”。如果某个排列中所有数字均为“逆序”,则我们称这个排列为“全逆序排列”。
问题:给出一个n,求数列1~n的所有排列方式中的“全逆序排列”数。
数列1,2,3,4,……,n的全排列总排列数为n!种。其中,若数字k排在第k位称为“正序”,若数字k排在第k位以外的位上,称之为“逆序”。如果某个排列中所有数字均为“逆序”,则我们称这个排列为“全逆序排列”。
问题:给出一个n,求数列1~n的所有排列方式中的“全逆序排列”数。
楼主试下用排除法,排除非全逆序排列的数目剩下的就是全逆序排列的数目了。
设f(n)表示全逆序排列数,则n = 1 时,F(n) = 0 ; n = 2 时,F(n) = 1 ; n >= 3 时分析如下:
1、排列总数为n!
3、减去n个数中有1个正序,其它逆序的情况 C(n , 1)F(n-1) //PS: C(n,1)表示组合数
4、减去n个数中有2个正序,其它逆序的情况 C(n , 2 )F(n-2)
……
即F(n) = n! - C(n,1)F(n-1) - C(n,2)F(n-2) - …… - C(n,n-1)F(1) - C(n,n)F(0)
建议楼主采用递归算法,还有就是n较大时计算机的数据类型不足以存储其内容,需要设计一个专门的大数类。