错排问题

【题目描述】

求多少个个数的排列 ,满足对于任意的。

输入格式

一个整数。

输出格式

一个整数,表示答案。

输入样例

2

输出样例

1

数据范围与提示

对于的数据,。


思路

有种选法,设,则。当时,问题等价于个数时的选法;当时,问题等价于个数时的选法。得出递推关系式:

下面是C++版的代码。

#include 
using namespace std;
long long ans[21]= {0,0,1},n;

int main()
{
    for(int i=3; i<=20; i++)
        ans[i]=(i-1)*(ans[i-2]+ans[i-1]);
    cin>>n;
    cout<

你可能感兴趣的:(错排问题)