#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
int main()
{
long long int a[21];//数据可能过大,用lli
a[1]=0;
a[2]=1;
int i,n;
while(scanf("%d",&n)!=EOF)
{
for(i=3; i<=20; i++)
{
a[i]=(i-1)*(a[i-1]+a[i-2]);
}
printf("%lld\n",a[n]);
}
return 0;
}
理论知识课本上都有,直接上n封信的错排公式
f(n)=(n-1)*(f(n-1)+f(n-2))
f(1)=0;f(2)=1;