题目意思
给你n个信封和n封信,要求将全部的信全部装错信封,问最多有多少种装法
解题思路
这是一个典型的错排问题,它用到一个结论F(n)=(n-1)*(F(n-1)+F(n-2))。
代码部分
#include <iostream>
#include <cstdio>
using namespace std;
long long f[25];
void PX()
{
f[1]=0,f[2]=1;
for(int i=3; i<=20; i++)
{
f[i]=(i-1)*(f[i-1]+f[i-2]);
}
}
int main()
{
int n;
PX();
while(cin>>n)
{
cout<<f[n]<<endl;
}
return 0;
}